docker学习笔记(三)镜像 您所在的位置:网站首页 镜像干扰是什么意思 docker学习笔记(三)镜像

docker学习笔记(三)镜像

2024-07-11 22:02| 来源: 网络整理| 查看: 265

参考:汤小洋老师的教学视频

docker学习笔记(一)【docker 介绍、卸载、安装、配置加速】 docker学习笔记(二)docker常用命令 docker学习笔记(四)使用docker搭建环境 docker学习笔记(五)如何创建自己的阿里云镜像仓库(这是2021版的阿里云教程) 1、镜像的分层结构

什么是镜像? 镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境的软件。也就是说镜像包含了运行软件需要的环境和软件本身。比如:tomcat这个软件的运行,他需要的环境是jdk,而jdk需要的环境是系统。 镜像是分层的,是基于联合文件系统的。什么是联合文件系统

分层的好处 比如:tomcat镜像,它本身也是分层的,它里面有很多镜像层,比如jdk镜像层,centos镜像层,这些也被称为基础镜像。 分层可以共享资源,便于复用。当拉取一个镜像时,本地有这个镜像需要的基础镜像,那么它就会直接使用本地的基础镜像,而不会再去拉取一个一样的基础镜像。

镜像是只可读的,当镜像run后形成的容器才是可读写的 在这里插入图片描述

2、创建镜像

有时从Docker镜像仓库中下载的镜像不能满足我们的要求,此时可以基于这个镜像(基础镜像)封装一个自己的镜像。 我们创建镜像的方式有两种:

更新镜像:使用docker commit命令 将修改过的容器提交一个新的镜像构建镜像:使用docker build命令,需要创建Dockerfile文件 2.1、更新镜像 docker commit 先使用基础镜像创建一个容器,然后对镜像镜像修改,最后将容器commit为一个新的镜像运行一个镜像,以tomcat为例。 [root@iz2zedg4ylq9iqtwm11wecz ~]# docker run --name mytomcat -d -p:9800:8080 \ > -v /tmp/tomcat:/usr/local/tomcat/webapps:rw c43a65faae57 2147f5a186b6b92a9adcd5171633740d9020d850ec656c7e9d70663025d44e4a 进入镜像 [root@iz2zedg4ylq9iqtwm11wecz ~]# docker exec -it 2147f5a186b6 /bin/bash root@2147f5a186b6:/usr/local/tomcat# 更改tomcat容器/usr/local/tomcat/webapps/ROOT里面的index.jsp root@2147f5a186b6:/usr/local/tomcat/webapps/ROOT# echo hello word tomcat > index.jsp root@2147f5a186b6:/usr/local/tomcat/webapps/ROOT# cat index.jsp hello word tomcat

在这里插入图片描述

commit容器 使它变成新的镜像 语法: docker commit -m=“描述信息” -a=“作者” 容器id容器名 命名空间/新镜像名:tag 命名空间就是公司的名字,就像Java的包名一样,一般写公司地址 在这里插入图片描述 [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker commit -m="修改了tomcat的主页" -a="李华" 2147f5a186b6 wuyujitang.top/mytomcat:1.0.1 sha256:6339f733ef6757a69a45f633dcf47272b61a4e9a78ff4cc2665a4838e5f199c6 [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wuyujitang.top/mytomcat 1.0.1 6339f733ef67 7 seconds ago 667 MB docker.io/tomcat latest c43a65faae57 13 days ago 667 MB docker.io/mysql 5.7 2c9028880e58 2 weeks ago 447 MB docker.io/centos latest 300e315adb2f 5 months ago 209 MB [root@iz2zedg4ylq9iqtwm11wecz webapps]# 使用自己commit的镜像

先删除之前的镜像

[root@iz2zedg4ylq9iqtwm11wecz webapps]# docker rm -f 2147f5a186b6 2147f5a186b6 [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker run -d -p:9800:8080 -v /tmp/tomcat:/usr/local/tomcat/webapps:rw --name mytomcat1.0.0 6339f733ef67 1080e80f41aaeb7d1e2ca618a3ecfc1fc9b07c02c844fe03f2a136213e461023 [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1080e80f41aa 6339f733ef67 "catalina.sh run" 8 seconds ago Up 8 seconds 0.0.0.0:9800->8080/tcp mytomcat1.0.0 [root@iz2zedg4ylq9iqtwm11wecz webapps]# docker exec -it 1080e80f41aa /bin/bash root@1080e80f41aa:/usr/local/tomcat# ls BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work root@1080e80f41aa:/usr/local/tomcat# cd webapps root@1080e80f41aa:/usr/local/tomcat/webapps# ls ROOT root@1080e80f41aa:/usr/local/tomcat/webapps# cd ROOT/ root@1080e80f41aa:/usr/local/tomcat/webapps/ROOT# cat index.jsp hello word tomcat

在这里插入图片描述

2.2、创建镜像 docker build 需要先编写Dockerflie 2.2.1、创建一个Dockerfile (这里不详细展开,后面再详细介绍)

注意1、编写Dockerfile的时候不需要指定扩展名 2、Dockerfile文件不一定要命名为Dockerfile,如果命名为其他后面在build的时候需要指定文件的路径和名字

[root@iz2zedg4ylq9iqtwm11wecz tmp]# vim Dockerflie

vim的基础使用(vim 和vi是两个linux的文本编辑器,相当于win的文本编辑器。vim是vi彩色版的可以这么理解) : 1、按i进入写模式 2、按Esc退出写模式 3、退出写模式后输入:可以是光标定位到底部,以便输入命令 4、输入:wq 保存并退出 注意:复制、粘贴与win不同需要退出写模式才能进行复制、粘贴 5、复制 yy 复制游标所在的那一行(常用) 6、粘贴 p 为将已复制的数据在光标下一行贴上,P 则为贴在游标上一行! vi/vim的基本使用

#创建的这个镜像是基于什么基础镜像的 FROM tomcat # 作者 MAINTAINER [email protected] #执行命令 RUN touch /usr/local/tomcat/webapps/aaa.txt RUN echo "hello word DockerFile! " > /usr/local/tomcat/webapps/index.jsp RUN cat /usr/local/tomcat/webapps/index.jsp 2.2.2、使用Dockerfile 构建镜像 我们先查看docker build的帮助文档 在这里插入图片描述docker build -f Dockerfile所在的目录/Dockerfile文件的名字 -t wuyujitng.top/mytomcat:v1Dockerfile . 注意docker build 最后面有一个点 '.' [root@iz2zedg4ylq9iqtwm11wecz tmp]# docker build -f Dockerflie -t wuyujitng.top/mytomcat:v1Dockerfile . Sending build context to Docker daemon 249.3 kB Step 1/4 : FROM mytomcat Trying to pull repository docker.io/library/mytomcat ... repository docker.io/mytomcat not found: does not exist or no pull access [root@iz2zedg4ylq9iqtwm11wecz tmp]# vim Dockerflie [root@iz2zedg4ylq9iqtwm11wecz tmp]# docker build -f Dockerflie -t wuyujitng.top/mytomcat:v1Dockerfile . Sending build context to Docker daemon 249.3 kB Step 1/5 : FROM tomcat ---> c43a65faae57 Step 2/5 : MAINTAINER [email protected] ---> Using cache ---> 2cf59b12c530 Step 3/5 : RUN touch /usr/local/tomcat/webapps/aaa.txt ---> Running in 3707b8b84edf ---> 72b57a06347f Removing intermediate container 3707b8b84edf Step 4/5 : RUN echo "hello word DockerFile! " > /usr/local/tomcat/webapps/index.jsp ---> Running in 63e6c9c62537 ---> 021a54a53a7b Removing intermediate container 63e6c9c62537 Step 5/5 : RUN cat /usr/local/tomcat/webapps/index.jsp ---> Running in 6162f49d9ea1 hello word DockerFile! ---> f0c82b2626a9 Removing intermediate container 6162f49d9ea1 Successfully built f0c82b2626a9

验证创建镜像成功

[root@iz2zedg4ylq9iqtwm11wecz ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wuyujitng.top/mytomcat v1Dockerfile f0c82b2626a9 3 hours ago 667 MB wuyujitang.top/mytomcat 1.0.1 6339f733ef67 4 hours ago 667 MB docker.io/tomcat latest c43a65faae57 13 days ago 667 MB docker.io/mysql 5.7 2c9028880e58 2 weeks ago 447 MB docker.io/centos latest 300e315adb2f 5 months ago 209 MB [root@iz2zedg4ylq9iqtwm11wecz ~]# docker run -d -p 9800:8080 --name mytomcat f0c82b2626a9 493103395bf7d04f2fec3834c947b736eb40675ff507c61f90b08b6378511175 [root@iz2zedg4ylq9iqtwm11wecz ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 493103395bf7 f0c82b2626a9 "catalina.sh run" 26 seconds ago Up 25 seconds 0.0.0.0:9800->8080/tcp mytomcat [root@iz2zedg4ylq9iqtwm11wecz ~]# docker exec -it 493103395bf7 /bin/bash root@493103395bf7:/usr/local/tomcat# ls BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work root@493103395bf7:/usr/local/tomcat# cd webapps root@493103395bf7:/usr/local/tomcat/webapps# ls aaa.txt index.jsp root@493103395bf7:/usr/local/tomcat/webapps# cat index.jsp hello word DockerFile! root@493103395bf7:/usr/local/tomcat/webapps# cat aaa.txt root@493103395bf7:/usr/local/tomcat/webapps# 3、Dockerfile 3.1、查看tomcat官方Dockerfile

在这里插入图片描述

3.2、Dockerfile简介 Dockerfile是用来构建Docker镜像的文件,是由一系列命令和参数构成的脚本Dockerfile从FROM命令开始,紧接着各种命令、参数,最终会生成一个新的镜像 3.3、Dockerfile用法 3. 3.1、语法规则 指令必须大写,且后面必须跟着参数第一条指令必须是FROM,指定Base Ilmage基础镜像指令按从上往下的顺序,依次执行每条指定都会创建一个新的镜像层并提交’#‘ 表示注释 3.3.2、常用指令

在这里插入图片描述

3. 4、案例 编写Dockerfile文件,这个Dockerfile的文件名为DockerFile2 [root@iz2zedg4ylq9iqtwm11wecz tmp]# ls Dockerflie php-cgi-70.sock hsperfdata_root systemd-private-1834ff36204f4f2d946848661d4da1da-ntpd.service-CTDxLR hsperfdata_www tmp.INpwCFw96T index.jsp tmp.wc6ZL9XBpo mysql.sock tomcat mysqlx.sock [root@iz2zedg4ylq9iqtwm11wecz tmp]# vi DockerFile2

DockerFile2的内容

#构建的镜像的基础镜像是 FROM centos #作者 MAINTAINER [email protected] #配置环境变量 ENV MYPATH /user/local/centos #创建这个目录 $MYPATH 指的就是上面的目录,相当于一个变量 RUN mkdir -p $MYPATH #WORKDIR指定工作目录 WORKDIR $MYPATH # RUN是在构建镜像的时候执行的,这个时候镜像还没有构建完成,它于CMD命令不同 RUN yum -y install vim RUN yum -y install wegt #创建挂载点,也就是挂载目录 #但是这里的挂载点是,没有办法直接指定挂载的宿主主机的目录的.因为当别人使用这个Dockerfile创建镜像的时候,你指定的宿主>主机不一定有这个目录。 #因此,宿主主机的挂载目录是自动生成的,这里的挂载点["/data1","/data2"])是容器的挂载目录。 VOLUME ["/data1","/data2"] #CMD 命令只能有一条,下面这个命令的意思是在运行镜像的时候会,执行/bin/bash个命令 也就是 将/bin/bash 拼接在 docker run -it 镜像id 后面 ,变成docker run -it 镜像id /bin/bash CMD ["/bin/bash"] 构建镜像 docker build -f 指定Dockerfile文件 -t 指定镜像的命名空间/名字:版本 [root@iz2zedg4ylq9iqtwm11wecz tmp]# docker build -f DockerFile2 -t wuyujitang.top/mycentos:v1 . Sending build context to Docker daemon 250.9 kB Step 1/9 : FROM centos ---> 300e315adb2f Step 2/9 : MAINTAINER [email protected] ---> Using cache ---> 3058640b61fb Step 3/9 : ENV MYPATH /user/local/centos ---> Using cache ---> 8f43e6e02412 Step 4/9 : RUN mkdir -p $MYPATH ---> Using cache ---> 2748846c43eb Step 5/9 : WORKDIR $MYPATH ---> Using cache ---> 5f56bbf39b9d Step 6/9 : RUN yum -y install vim ---> Using cache ---> ea5511dd2dc5 Step 7/9 : RUN yum -y install wget ---> Running in 729eecfc3d00 Last metadata expiration check: 0:04:01 ago on Fri May 28 02:30:39 2021. Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: wget x86_64 1.19.5-10.el8 appstream 734 k Installing dependencies: libpsl x86_64 0.20.2-6.el8 baseos 61 k publicsuffix-list-dafsa noarch 20180723-1.el8 baseos 56 k Transaction Summary ================================================================================ Install 3 Packages Total download size: 851 k Installed size: 2.9 M Downloading Packages: (1/3): wget-1.19.5-10.el8.x86_64.rpm 7.9 MB/s | 734 kB 00:00 (2/3): libpsl-0.20.2-6.el8.x86_64.rpm 475 kB/s | 61 kB 00:00 (3/3): publicsuffix-list-dafsa-20180723-1.el8.n 375 kB/s | 56 kB 00:00 -------------------------------------------------------------------------------- Total 723 kB/s | 851 kB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : publicsuffix-list-dafsa-20180723-1.el8.noarch 1/3 Installing : libpsl-0.20.2-6.el8.x86_64 2/3 Installing : wget-1.19.5-10.el8.x86_64 3/3 Running scriptlet: wget-1.19.5-10.el8.x86_64 3/3 Verifying : wget-1.19.5-10.el8.x86_64 1/3 Verifying : libpsl-0.20.2-6.el8.x86_64 2/3 Verifying : publicsuffix-list-dafsa-20180723-1.el8.noarch 3/3 Installed: libpsl-0.20.2-6.el8.x86_64 publicsuffix-list-dafsa-20180723-1.el8.noarch wget-1.19.5-10.el8.x86_64 Complete! ---> 1973867141c9 Removing intermediate container 729eecfc3d00 Step 8/9 : VOLUME /data1 /data2 ---> Running in 70152fec876c ---> 73546869682a Removing intermediate container 70152fec876c Step 9/9 : CMD /bin/bash ---> Running in 829a7639908f ---> d7af8ea722aa Removing intermediate container 829a7639908f Successfully built d7af8ea722aa [root@iz2zedg4ylq9iqtwm11wecz tmp]# 运行构建好的镜像 [root@iz2zedg4ylq9iqtwm11wecz tmp]# docker run -it d7af8ea722aa [root@c737558825b8 centos]# ls #这里run后会进入在Dockerfile指定的工作目录 /user/local/centos [root@c737558825b8 centos]# cd / [root@c737558825b8 /]# ls bin data2 etc lib lost+found mnt proc run srv tmp usr data1 dev home lib64 media opt root sbin sys user var [root@c737558825b8 /]# 使用docker history 镜像id 可以查看镜像构建的过程 [root@iz2zedg4ylq9iqtwm11wecz tmp]# docker history d7af8ea722aa IMAGE CREATED CREATED BY SIZE COMMENT d7af8ea722aa 13 minutes ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B 73546869682a 13 minutes ago /bin/sh -c #(nop) VOLUME [/data1 /data2] 0 B # 挂载点 1973867141c9 13 minutes ago /bin/sh -c yum -y install wget 14.6 MB # RUN ea5511dd2dc5 17 minutes ago /bin/sh -c yum -y install vim 58 MB # RUN 5f56bbf39b9d 17 minutes ago /bin/sh -c #(nop) WORKDIR /user/local/centos 0 B # 指定工作目录 2748846c43eb 17 minutes ago /bin/sh -c mkdir -p $MYPATH 0 B # 创建目录 8f43e6e02412 17 minutes ago /bin/sh -c #(nop) ENV MYPATH=/user/local/... 0 B # 环境变量 3058640b61fb 17 minutes ago /bin/sh -c #(nop) MAINTAINER [email protected] 0 B # 指定作者 300e315adb2f 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B #CMD 5 months ago /bin/sh -c #(nop) LABEL org.label-schema.... 0 B 5 months ago /bin/sh -c #(nop) ADD file:bd7a2aed6ede423... 209 MB # 这个就是FROM的基础镜像 使用docker inspect 容器id 查看容器的挂载点 在这里插入图片描述 "Mounts": [ { "Type": "volume", "Name": "c1796779949c8664303e13f936518e6a6247433b7ae95f18618e4acb18e0524f", "Source": "/var/lib/docker/volumes/c1796779949c8664303e13f936518e6a6247433b7ae95f18618e4acb18e0524f/_data", "Destination": "/data1", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" }, { "Type": "volume", "Name": "63e7872e808e3d507ada1c9feefda42252e2473f81299304b51a080c6a08c427", "Source": "/var/lib/docker/volumes/63e7872e808e3d507ada1c9feefda42252e2473f81299304b51a080c6a08c427/_data", "Destination": "/data2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ], 验证挂载点 [root@iz2zedg4ylq9iqtwm11wecz tmp]# cd /var/lib/docker/volumes/c1796779949c8664303e13f936518e6a6247433b7ae95f18618e4acb18e0524f/_data [root@iz2zedg4ylq9iqtwm11wecz _data]# ls [root@iz2zedg4ylq9iqtwm11wecz _data]# tuoch aaa.txt -bash: tuoch: command not found [root@iz2zedg4ylq9iqtwm11wecz _data]# touch aaa.txt [root@iz2zedg4ylq9iqtwm11wecz _data]# ls aaa.txt [root@iz2zedg4ylq9iqtwm11wecz _data]# docker exec -it c2b49fbba406 /bin/bash [root@c2b49fbba406 centos]# cd /data1 [root@c2b49fbba406 data1]# ls aaa.txt [root@c2b49fbba406 data1]# touch 111.txt [root@c2b49fbba406 data1]# ls 111.txt aaa.txt [root@c2b49fbba406 data1]# exit exit [root@iz2zedg4ylq9iqtwm11wecz _data]# ls 111.txt aaa.txt [root@iz2zedg4ylq9iqtwm11wecz _data]# 3.5、CMD与ENTRYPOINT区别

一个在执行run时会被后面指定的命令覆盖,一个不会被覆盖 CMD会被覆盖,ENTRYPOINT会被覆盖 在这里插入图片描述 在这里插入图片描述

3.6、自定义tomcat

在这里插入图片描述 在这里插入图片描述



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有