Docker镜像的创建方法与数据管理

网友投稿 268 2022-10-14

Docker镜像的创建方法与数据管理

Docker镜像的创建方法

创建镜像的方法有三种,分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile 创建。

1、基于已有镜像创建

基于已有镜像创建主要使用Docker commit 命令。实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:docker commit [选项] 容器ID/名称 仓库名称:[标签] 常用选项: -m:说明信息 -a:作者信息 -p:生成过程中停止容器的运行

基于已有的docker images #查看镜像信息 > > docker create -it /bin/bash #创建容器;可以不用运行 > > docker ps -a #查看容器运行信息 > > docker commit -m "new" -a "fddb8d93d6a7 #创建一个名为的新镜像 > > docker images | grep #查看新创建的镜像信息

2、基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为http://download.openvz.org/template/precreated/。 使用docker导入命令将下载的debin模板压缩包导入为本地镜像;

> wget #下载模板压缩包 > > cat debian-7.0-x86-minimal.tar.gz | docker import - debin01:new #导入模板压缩包生成镜像 > > docker images | grep new #查看新生成的镜像信息

3、基于Dockerfile 创建(推荐)

Dockerfile是由一组指令组成的文件,其中命一条指令对应Linux中的命令,Docker程序将读取Dockerfile中的指令生成指定镜像。 Dockerfile结构大致分为四大部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。Docker每行支持一条指令,每条指令可携带多个参数,支持使用以“#”号开头的注释。 在编写Dockerfile时,有严格的格式需要遵循:第一行必须使用FROM指令指明所基于的镜像名称;之后使用MAINTAINER指令说明维护镜像的用户信息;然后是镜像操作相关指令,如RUN指令,每一条都会给基础镜像添加新的一层;最后使用CMD指令,来指定启动容器时需要运行的命令操作。 Docker操作指令:

header 1 header 2
指令 含义
FROM 镜像 指定新镜像所基于的镜像,第一条指令必须为FORM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER名字 说明新镜像的维护人信息
RUN 命令 在所基于的镜像上执行命令,并提交到新的镜像中
CMD["要运行的程序","参数1","参数2"] 指定启动容器时要运行的命令或脚本,Dockerfile只能有一条CMD命令,如果指定多条则只执行最后一条
EXPOSE 端口号 指定新镜像加载到Docker时需要开启的端口
ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录 目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录 目标文件/目录 将本地主机上的源文件/目标复制到目标地点,源文件/目录要与Dockerfile位于相同目录中
VOLUME ["目录"] 在容器中创建一个挂载点
USER 用户名/UID 指定运行容器时的用户
WORKDIR 路径 为后续的RUN、CMD、ENTRYPOINT 指定工作目录
ONBUILD 命令 指定所生成的镜像作为一个基础镜像时所需要运行的命令

mkdir apache #创建工作目录 cd apache vim Dockerfile #编写Dockerfile文件

#基于的基础镜像 FROM centos #维护镜像的用户信息 MAINTAINER this is first test #镜像操作指令安装apache软件 RUN yum -y update RUN yum -y install httpd #开启 80 端口 EXPOSE 80 #复制网站首页文件 ADD index.html /var/www/html/index.html #将执行脚本复制到镜像中 ADD run.sh /run.sh RUN chmod 755 /run.sh #启动容器时执行脚本 CMD ["/run.sh"]

vim run.sh#编写执行脚本

#!/bin/bash rm -rf /run/httpd/* exec /usr/sbin/apachectl -D FOREGROUND

echo "this is web test" > index.html #创建测试页面 docker build -t . #生成镜像(注意别忘了末尾有".") docker run -d -p 49188:80 #运行镜像;-p实现从本地端口49188到容器80端口的映射

使用浏览器查看容器中Apache服务测试页;

Docker镜像上传私有仓库

docker pull registry vim /etc/docker/daemon.json #创建一个json文件,否则在往自定义的私用仓库中上传镜像时,会报错

{"insecure-registries":["192.168.190.139:5000"]} #本地IP地址和使用端口

systemctl restart docker.service #重启docker docker create -it registry /bin/bash #创建registry容器 docker ps -a #查看容器运行信息 docker start 4748e2cce568 #启动容器 docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry #宿主机的/data/registry自动创建挂载容器中的/tmp/registry docker tag 192.168.190.139:5000/test01 #更改标记为192.168.190.138:5000/test01 docker push 192.168.190.139:5000/test01 #上传 curl -XGET #获取私有仓库列表

Docker 的数据管理

1、数据卷

数据卷是一个共容器使用的特殊目录,位于容器中,可将宿主机的目录挂载到数据卷上,对数据的修改操作立刻可见,并且更新数据不会影响镜像,从而实现数据在宿主机与容器之间的迁移。 在docker run 命令中使用-v选项可以在容器内创建数据卷。多次使用-v选项可创建多个数据卷。使用--name 选项可以给容器创建一个友好的自定义名称。

docker run -v /var/--name web1 -it /bin/bash #宿主机目录/var/挂载容器中的/data cd /data1 #cd到容器的挂载目录 touch test01 #创建一个空文件 exit #退出 ls /var/ #查看宿主机相对应的目录

2、数据卷容器

数据卷容器就是一个普通的容器,专门提供数据卷给其他容器挂载使用。使用方法如下:首先,需创建一个容器作为数据卷容器,之后在其他容器创建时用 --volumes-from挂载数据卷容器中的数据卷使用。

docker run --name web2 -v /data1 -v /data2 -it /bin/bash #数据卷容器 docker run -it --volumes-from web2 --name db1 /bin/bash #新容器挂载数据卷容器web2

在db1容器数据卷/data1中创建一个文件,在web2容器中的/data1目录中也可以看到。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:如何从Rancher 1.6迁移到Rancher 2.0?这份清单可以帮助你!
下一篇:Java中提供synchronized后为什么还要提供Lock
相关文章

 发表评论

暂时没有评论,来抢沙发吧~