自定义镜像centos
需求:
- 容器默认工作目录为/usr/local
- 容器默认具有vim编辑器
- 容器默认可以使用telnet命令
dockerfile编写:
FROM centos MAINTAINER nick<275148221@qq.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim RUN yum -y install telnet.* EXPOSE 80 CMD echo $MYPATH CMD echo "success--------------ok" CMD /bin/bash
由dockerfile文件build镜像:
[root@izbp13m488196e5hna361rz mydocker]# docker build -f /mydocker/dockerfile2 -t mycentos:1.0 . Sending build context to Docker daemon 3.072kB Step 1/10 : FROM centos ---> 300e315adb2f Step 2/10 : MAINTAINER nick<275148221@qq.com> ---> Running in 31a16822cb11 Removing intermediate container 31a16822cb11 ---> ba6957c0127e Step 3/10 : ENV mypath /usr/local ---> Running in b21b6fa8a9b3 Removing intermediate container b21b6fa8a9b3 ---> d602194ad012 Step 4/10 : WORKDIR $mypath ---> Running in 66c65a497334 Removing intermediate container 66c65a497334 ---> 8f2d9e898468 Step 5/10 : RUN yum install -y vim ---> Running in 8df005b36663 CentOS Linux 8 - AppStream 3.3 MB/s | 6.3 MB 00:01 CentOS Linux 8 - BaseOS 1.4 MB/s | 2.3 MB 00:01 CentOS Linux 8 - Extras 7.3 kB/s | 8.6 kB 00:01 Dependencies resolved. ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: vim-enhanced x86_64 2:8.0.1763-15.el8 appstream 1.4 M Installing dependencies: gpm-libs x86_64 1.20.7-15.el8 appstream 39 k vim-common x86_64 2:8.0.1763-15.el8 appstream 6.3 M vim-filesystem noarch 2:8.0.1763-15.el8 appstream 48 k which x86_64 2.21-12.el8 baseos 49 k Transaction Summary ================================================================================ Install 5 Packages Total download size: 7.8 M Installed size: 30 M Downloading Packages: (1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 177 kB/s | 39 kB 00:00 (2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 254 kB/s | 48 kB 00:00 (3/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm 2.3 MB/s | 1.4 MB 00:00 (4/5): which-2.21-12.el8.x86_64.rpm 169 kB/s | 49 kB 00:00 (5/5): vim-common-8.0.1763-15.el8.x86_64.rpm 5.8 MB/s | 6.3 MB 00:01 -------------------------------------------------------------------------------- Total 1.4 MB/s | 7.8 MB 00:05 CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00 warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY Importing GPG key 0x8483C65D: Userid : "CentOS (CentOS Official Signing Key) <security@centos.org>" Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D From : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial Key imported successfully Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : which-2.21-12.el8.x86_64 1/5 Installing : vim-filesystem-2:8.0.1763-15.el8.noarch 2/5 Installing : vim-common-2:8.0.1763-15.el8.x86_64 3/5 Installing : gpm-libs-1.20.7-15.el8.x86_64 4/5 Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64 4/5 Installing : vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64 5/5 Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64 5/5 Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5 Verifying : vim-common-2:8.0.1763-15.el8.x86_64 2/5 Verifying : vim-enhanced-2:8.0.1763-15.el8.x86_64 3/5 Verifying : vim-filesystem-2:8.0.1763-15.el8.noarch 4/5 Verifying : which-2.21-12.el8.x86_64 5/5 Installed: gpm-libs-1.20.7-15.el8.x86_64 vim-common-2:8.0.1763-15.el8.x86_64 vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch which-2.21-12.el8.x86_64 Complete! Removing intermediate container 8df005b36663 ---> c73dae587cce Step 6/10 : RUN yum install -y telnet.* ---> Running in 60924d6c74bf Last metadata expiration check: 0:00:13 ago on Wed Feb 3 10:31:59 2021. Dependencies resolved. ================================================================================ Package Architecture Version Repository Size ================================================================================ Installing: telnet x86_64 1:0.17-73.el8_1.1 appstream 72 k Transaction Summary ================================================================================ Install 1 Package Total download size: 72 k Installed size: 153 k Downloading Packages: telnet-0.17-73.el8_1.1.x86_64.rpm 240 kB/s | 72 kB 00:00 -------------------------------------------------------------------------------- Total 61 kB/s | 72 kB 00:01 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : telnet-1:0.17-73.el8_1.1.x86_64 1/1 Running scriptlet: telnet-1:0.17-73.el8_1.1.x86_64 1/1 Verifying : telnet-1:0.17-73.el8_1.1.x86_64 1/1 Installed: telnet-1:0.17-73.el8_1.1.x86_64 Complete! Removing intermediate container 60924d6c74bf ---> a0788817c0bf Step 7/10 : EXPOSE 80 ---> Running in ac8bbad7d813 Removing intermediate container ac8bbad7d813 ---> 199cd7e851a0 Step 8/10 : CMD echo $mypath ---> Running in 795245e2e55b Removing intermediate container 795245e2e55b ---> 8757104d971c Step 9/10 : CMD echo "success --------- ok" ---> Running in 17739c202b85 Removing intermediate container 17739c202b85 ---> 3ca5bb1abcea Step 10/10 : CMD /bin/bash ---> Running in 1457a767590c Removing intermediate container 1457a767590c ---> 3b0cb5ffbc9f Successfully built 3b0cb5ffbc9f Successfully tagged mycentos:1.0
观察以上docker build的整个过程,从step1到step10,正好是dockerfile的10行,每一步执行一行,执行的流程如下:
1:docker从基础镜像运行一个容器
2:执行一条指令并对容器作出修改
3:执行类似docker commit的操作提交一个新的镜像层
4:docker再基于刚提交的镜像运行一个新容器
5:执行dockerfile中的下一条指令直到所有指令都执行完成
在第五步和第六步,分别yum安装了vim和telnet,这也使得最后生成的镜像mycentos比父镜像centos要大:
[root@izbp13m488196e5hna361rz ~]# docker images *centos REPOSITORY TAG IMAGE ID CREATED SIZE mycentos 1.0 3b0cb5ffbc9f 24 hours ago 281MB centos latest 300e315adb2f 8 weeks ago 209MB
运行容器验证
[root@izbp13m488196e5hna361rz ~]# docker run -it mycentos:1.0 /bin/bash [root@17f1b6d688d8 local]# pwd /usr/local [root@17f1b6d688d8 local]# which vim /usr/bin/vim [root@17f1b6d688d8 local]# which telnet /usr/bin/telnet
启动容器后,工作目录为/usr/local,已经安装vim和telnet,三个需求均已满足。