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  我爱少妇...哈哈,证明挂载成功,数据共享成功。

 

posted @ 2022-04-08 16:00  天才卧龙  阅读(541)  评论(0编辑  收藏  举报