docker 镜像的生成方式,初识dockerfile,dockerfile 指定匿名挂载
十年河东,十年河西,莫欺少年穷
学无止境,精益求精
第一种方式:
docker 本地镜像可通过容器来生成,使用命令 docker commit
例如
docker commit -a "ChenWoLong" -m "myNginx" 0fa75e76671a mnginx:v.01
-a 代表本次生成镜像的作者:ChenWoLong
-m 本次镜像生成的备注信息
0fa75e76671a 是容器ID
mnginx:v.01 中的 mnginx 是生成的镜像名称【镜像名称必须全部小写】,v.01 是镜像版本号,也就是所谓的tag
执行此命令后,我们查看本地镜像如下:
测试:
ROM centos MAINTAINER wolong.Chen<chenwolong2022@163.com> ENV MYPATH /usr/local WORKDIR $MYPATH VOLUME ["volume01","volume02"] CMD echo "------yum vim--------------" RUN yum -y install vim EXPOSE 80 443 CMD echo $MYPATH CMD echo "-----end----------" CMD /bin/bash
第二种方式:编写dockerfile文件【由脚本生成镜像】,由dockerfile来生成镜像
1、新建一个文件,名为dockerfile01
[root@localhost ~]# cd /home
[root@localhost home]# ls
chenwolong dockerfiles mysql nginxvolume
[root@localhost home]# cd dockerfiles
[root@localhost dockerfiles]# touch dockerfile01
[root@localhost dockerfiles]# ls
dockerfile01
[root@localhost dockerfiles]# vim dockerfile01
2、编写文件内容为:
FROM centos VOLUME ["volume01","volume02"] CMD echo "--------------build end-----------------" CMD /bin/bash
from centos 可以理解为:容器使用 centos 作为基础环境
volume["",""] 可以理解为:匿名挂载镜像,此时volume01 和 volume02 挂载到主机的路径为默认路径: /var/lib/docker/volumes 目录中
CMD echo "" 为打印输出
CMD /bin/bash 为默认bash
3、构建镜像
docker build -f /home/dockerfiles/dockerfile01 -t mydockerimage .
-f 是指要构建的dockerfile全路径 或 相对路径 -t 生成的镜像名称 注意:最后的 . 不能少
执行此命令后,输出如下:
Sending build context to Docker daemon 2.048kB Step 1/4 : FROM centos ---> 5d0da3dc9764 Step 2/4 : VOLUME ["volume01","volume02"] ---> Running in f8a1b89e3549 Removing intermediate container f8a1b89e3549 ---> a42c956d8d3f Step 3/4 : CMD echo "--------------build end-----------------" ---> Running in 597c01711c85 Removing intermediate container 597c01711c85 ---> 8d6bd8273e09 Step 4/4 : CMD /bin/bash ---> Running in fe5a7a1cb407 Removing intermediate container fe5a7a1cb407 ---> 38f5719bab58 Successfully built 38f5719bab58 Successfully tagged mydockerimage:latest
命令显示执行成功,那么镜像生成成功
4、运行刚刚生成的镜像
docker run -it --name mydockerimages01 38f5719bab58 /bin/bash
5、容器内查看
ls -l
6、查看数据卷的容器内路径对应的本地主机路径
在容器内 volume01 和 volume02中建两个文件,如下:
root@7ff053ebd0af /]# cd /volume01 [root@7ff053ebd0af volume01]# touch 01.txt [root@7ff053ebd0af volume01]# cd /volume02 [root@7ff053ebd0af volume02]# touch 02.txt [root@7ff053ebd0af volume02]# vi 02.txt [root@7ff053ebd0af volume02]# cat 02.txt I iove shaofu [root@7ff053ebd0af volume02]#
7、退出容器,到本机中查看容器信息,并找到容器映射的路径
[root@7ff053ebd0af volume02]# exit exit [root@localhost dockerfiles]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7ff053ebd0af 38f5719bab58 "/bin/bash" 11 minutes ago Exited (0) 12 seconds ago mydockerimages01 0fa75e76671a nginx "/docker-entrypoint.…" 48 minutes ago Up 48 minutes 0.0.0.0:49157->80/tcp, :::49157->80/tcp nginx02 [root@localhost dockerfiles]# docker inspect 7ff053ebd0af
docker inspect 7ff053ebd0af 信息中的挂载新如下:
8、查看 volume02 的映射路径:/var/lib/docker/volumes/177b53a05672781ba288ff566397f0291679c402437c8052d151c039f24421e2/_data
[root@localhost dockerfiles]# ls /var/lib/docker/volumes/177b53a05672781ba288ff566397f0291679c402437c8052d151c039f24421e2/_data 02.txt [root@localhost dockerfiles]# cat /var/lib/docker/volumes/177b53a05672781ba288ff566397f0291679c402437c8052d151c039f24421e2/_data/02.txt I iove shaofu
本地目录中的 02.txt的内容和数据卷volume02一致,都是: I iove shaofu 我爱少妇...哈哈,证明挂载成功,数据共享成功。