dockerfile案例一:自定义镜像centos

自定义镜像centos

需求:

  1. 容器默认工作目录为/usr/local
  2. 容器默认具有vim编辑器
  3. 容器默认可以使用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,三个需求均已满足。

 

原文地址:https://www.cnblogs.com/xulan0922/p/14368788.html