看完这篇让你彻底搞懂 Dockerfile

Dockerfile 作用:

Dockerfile 就是Docker 中用来一键安装项目所有依赖的一个“命令文件” ,这里面都是按照Docker 官方要求进行命令编写, build 时候 就会按照 类似shell 命令一步一步执行并构建一个镜像;

说明:

从应用软件的角度来看,DockerFiledocker镜像与docker容器分别代表软件的三个不同阶段。

DockerFile 是软件的原材料 (代码)

Docker 镜像则是软件的交付品 .apk

Docker 容器则是软件的运行状态 (客户下载安装执行)

DockerFile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可!

Dockerfile 常用指令:

关键字:

FROM    #基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER    #镜像维护者信息 ,一般是姓名+邮箱

RUN  #容器构建时所需要运行的命令

EXPOSE   #当前容器对外保留出的端口

WORKDIR    #指定在创建容器后,终端默认登录进来的工作目录

ENV      #构建镜像过程中设置环境变量

ADD      #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

COPY     #类似ADD,拷贝宿主机的文件和目录到镜像中

VOLUME     #容器数据卷,用于数据保存和持久化工作

CMD        #指定一个容器启动时要运行的命令,dockerfile中可以有多个CMD指令,但只有最后一个生效

ENTRYPOINT        #指定一个容器启动时要运行的命令,和CMD一样

ONBUILD        #当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发

使用Dockerfile构建一个自己的Centos镜像

1、编写Dockerfile

查看官方默认的CentOS的情况:

 目的:使我们自己的镜像具备如下:登录后的默认路径、vim编辑器、查看网络配置ifconfig支持

准备编写Dockerfile文件

[root@wxy home]# mkdir mycentos
[root@wxy home]# cd mycentos/
[root@wxy mycentos]# ls
[root@wxy mycentos]# mkdir dockerfile-test
[root@wxy mycentos]# ls
dockerfile-test
[root@wxy mycentos]# cd dockerfile-test/
[root@wxy dockerfile-test]# vim mydockerfile-centos
[root@wxy dockerfile-test]# cat mydockerfile-centos 
FROM centos
MAINTAINER wxy<12345@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 9800

CMD echo $MYPATH
CMD echo "--------end---- -"
CMD /bin/bash

2、构建

docker build -f mydockerfile-centos -t mycentos:0.1 .

注意最后一个.别漏了 ,   .表示当前目录

[root@wxy dockerfile-test]# docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048 kB
Step 1/10 : FROM centos
 ---> 5d0da3dc9764
Step 2/10 : MAINTAINER wxy<12345@qq.com>
 ---> Running in 3a1cb3e6e5a4
 ---> 802bfb07b9cc
Removing intermediate container 3a1cb3e6e5a4
Step 3/10 : ENV MYPATH /usr/local
 ---> Running in 4deaa628d401
 ---> c2fef24e1a8b
Removing intermediate container 4deaa628d401
Step 4/10 : WORKDIR $MYPATH
 ---> 97d27980f64c
Removing intermediate container 1ee53e441e70
Step 5/10 : RUN yum -y install vim
 ---> Running in ab569156525f

CentOS Linux 8 - AppStream                      5.3 MB/s | 8.4 MB     00:01    
CentOS Linux 8 - BaseOS                         8.8 MB/s | 4.6 MB     00:00    
CentOS Linux 8 - Extras                          12 kB/s |  10 kB     00:00    
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-16.el8         appstream      1.4 M
Installing dependencies:
 gpm-libs            x86_64      1.20.7-17.el8             appstream       39 k
 vim-common          x86_64      2:8.0.1763-16.el8         appstream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-16.el8         appstream       49 k
 which               x86_64      2.21-16.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-17.el8.x86_64.rpm        421 kB/s |  39 kB     00:00    
(2/5): vim-filesystem-8.0.1763-16.el8.noarch.rp 1.3 MB/s |  49 kB     00:00    
(3/5): which-2.21-16.el8.x86_64.rpm             1.4 MB/s |  49 kB     00:00    
(4/5): vim-common-8.0.1763-16.el8.x86_64.rpm     16 MB/s | 6.3 MB     00:00    
(5/5): vim-enhanced-8.0.1763-16.el8.x86_64.rpm  2.8 MB/s | 1.4 MB     00:00    
--------------------------------------------------------------------------------
Total                                           6.1 MB/s | 7.8 MB     00:01     
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream                      1.6 MB/s | 1.6 kB     00:00    
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-16.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-16.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-16.el8.x86_64                    3/5 
  Installing       : gpm-libs-1.20.7-17.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64                          4/5 
  Installing       : vim-enhanced-2:8.0.1763-16.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-16.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-16.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-17.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-16.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-16.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-16.el8.noarch                4/5 
  Verifying        : which-2.21-16.el8.x86_64                               5/5 

Installed:
  gpm-libs-1.20.7-17.el8.x86_64         vim-common-2:8.0.1763-16.el8.x86_64    
  vim-enhanced-2:8.0.1763-16.el8.x86_64 vim-filesystem-2:8.0.1763-16.el8.noarch
  which-2.21-16.el8.x86_64             

Complete!
 ---> 7760f2961d01
Removing intermediate container ab569156525f
Step 6/10 : RUN yum -y install net-tools
 ---> Running in 1b744805bd84

Last metadata expiration check: 0:00:08 ago on Sat Jan 15 06:27:34 2022.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.52.20160912git.el8       baseos       322 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm   6.1 MB/s | 322 kB     00:00    
--------------------------------------------------------------------------------
Total                                           320 kB/s | 322 kB     00:01     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.52.20160912git.el8.x86_64                                     

Complete!
 ---> aa6cc4dd61fd
Removing intermediate container 1b744805bd84
Step 7/10 : EXPOSE 9800
 ---> Running in a8f69025a496
 ---> a01c616f0ae3
Removing intermediate container a8f69025a496
Step 8/10 : CMD echo $MYPATH
 ---> Running in ca8f58a9b757
 ---> 858b4f5cc829
Removing intermediate container ca8f58a9b757
Step 9/10 : CMD echo "--------end---- -"
 ---> Running in 7f6a92f39011
 ---> 319cf5a42b4a
Removing intermediate container 7f6a92f39011
Step 10/10 : CMD /bin/bash
 ---> Running in 36e18074ee53
 ---> 87d59549a036
Removing intermediate container 36e18074ee53
Successfully built 87d59549a036

3、运行

docker run -it 新镜像名称:TAG

[root@wxy dockerfile-test]# docker run -it mycentos:0.1
[root@65bc0003ac9c local]# docker ps -a
bash: docker: command not found
[root@65bc0003ac9c local]# pwd
/usr/local
[root@65bc0003ac9c local]# vim
[root@65bc0003ac9c local]# vim test
[root@65bc0003ac9c local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.18.0.4  netmask 255.255.0.0  broadcast 0.0.0.0
        inet6 fe80::42:acff:fe12:4  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:12:00:04  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 656 (656.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@65bc0003ac9c local]# 

可以看到,我们自己的镜像已经支持vim、ifconfig命令。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值