Dockerfile关键字详解

一、Dockerfile基础知识

  • 每个保留关键字(指令)都是必须是大写字母
  • 执行从上到下顺序执行
  • #表示注释
  • 每个指令都会创建提交一个新的额镜像层,并提交

二、Dockerfile常用的指令

(1) FROM 指定基础镜像

FROM centos 

(2)MAINTAINER 指定镜像的维护者信息,一般为邮箱

MAINTAINER hitredrose@163.com

(3)RUN 镜像构建时需要执行的命令

RUN yum install -y wget

(4)ADD 增加文件,会自动解压

ADD python.tar.gz /usr/local/

(5)WORKDIR 设置当前工作目录

WORKDIR /usr/local/python/

(6)VOLUME 挂载主机目录

VOLUME ["/usr/local/python","/usr/local/java/"]

(7)EXPOSE 暴露端口,注意这里指仅暴露容器的端口,并不会将容器端口与宿主机端口映射。也就是说在使用docker run的时候仍然需要继续使用-p进行端口映射,换言之,EXPOSE更多的作用在于给Dockerfile开发者提供开发端口的提示提示作用

EXPOSE 80

(8)CMD 指定容器启动的时候需要执行的命令,注意CMD只有最后一个命令会生效

CMD /bin/bash

(9)ENTRYPOINT 指定容器启动时需要运行的命令,注意ENTRYPOINT命令可以追加命令,即如果有多条ENTRYPOINT命令会全部执行,这是ENTRYPOINT命令和CMD命令最大的区别

ENTRYPOINT cd /opt
ENTRYPOINT /bin/bash

(10)ONBUILD 当构建一个被继承Dockerfile,这个时候就会运行ONBUILD指令

(11)COPY 类似ADD命令,将文件拷贝到镜像中

(11)ENV 构建的时候设置环境变量

三、Dockerfile实战测试

1、编写如下Dockerfile文件,创建自己的centos镜像

FROM centos
MAINTAINER redrose2100<hitredrose@163.com>
ENV JAVA_HOME /usr/local/jdk_1.8/
WORKDIR /usr/local
RUN yum install -y vim
RUN yum install -y net-tools

EXPOSE 80

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

2、编译镜像

docker build -f Dockerfile -t mycentos:1.0 .

[root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker build -f Dockerfile -t mycentos:1.0 .
Sending build context to Docker daemon  673.8MB
Step 1/10 : FROM centos
 ---> 5d0da3dc9764
Step 2/10 : MAINTAINER redrose2100<hitredrose@163.com>
 ---> Running in da64144bd09f
Removing intermediate container da64144bd09f
 ---> 27c3c3914066
Step 3/10 : ENV JAVA_HOME /usr/local/jdk_1.8/
 ---> Running in e2bc434f38ed
Removing intermediate container e2bc434f38ed
 ---> 5702a1a5fcb4
Step 4/10 : WORKDIR /usr/local
 ---> Running in 5e89bfc4bac3
Removing intermediate container 5e89bfc4bac3
 ---> 4c9ffec050e5
Step 5/10 : RUN yum install -y vim
 ---> Running in a7d01621e43c
CentOS Linux 8 - AppStream                      3.3 MB/s | 9.5 MB     00:02
CentOS Linux 8 - BaseOS                         2.6 MB/s | 7.5 MB     00:02
CentOS Linux 8 - Extras                         8.6 kB/s |  10 kB     00:01
Last metadata expiration check: 0:00:01 ago on Thu Oct 28 15:40:46 2021.
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-17.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-17.el8.x86_64.rpm        325 kB/s |  39 kB     00:00
(2/5): vim-filesystem-8.0.1763-15.el8.noarch.rp  74 kB/s |  48 kB     00:00
(3/5): which-2.21-12.el8.x86_64.rpm             859 kB/s |  49 kB     00:00
(4/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  1.5 MB/s | 1.4 MB     00:00
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm    6.0 MB/s | 6.3 MB     00:01
--------------------------------------------------------------------------------
Total                                           1.5 MB/s | 7.8 MB     00:05
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-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-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-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-17.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-17.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 a7d01621e43c
 ---> d5265b632c5d
Step 6/10 : RUN yum install -y net-tools
 ---> Running in e4936d8440ef
Last metadata expiration check: 0:00:42 ago on Thu Oct 28 15:40:46 2021.
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   1.9 MB/s | 322 kB     00:00
--------------------------------------------------------------------------------
Total                                           285 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!
Removing intermediate container e4936d8440ef
 ---> c46a704ec937
Step 7/10 : EXPOSE 80
 ---> Running in 4abcb3b7a496
Removing intermediate container 4abcb3b7a496
 ---> 9f90477f2a46
Step 8/10 : CMD echo $JAVA_HOME
 ---> Running in 808052b626b3
Removing intermediate container 808052b626b3
 ---> ed2f970d17e1
Step 9/10 : CMD echo "---end---"
 ---> Running in 29c9a4149056
Removing intermediate container 29c9a4149056
 ---> 72af12cddaf8
Step 10/10 : CMD /bin/bash
 ---> Running in 6bc2bc8e3d73
Removing intermediate container 6bc2bc8e3d73
 ---> 122504aa874c
Successfully built 122504aa874c
Successfully tagged mycentos:1.0
[root@iZbp1flzt6x7pxmxfhmxeeZ opt]#

然后执行docker images 查看如下:

[root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker images
REPOSITORY           TAG       IMAGE ID       CREATED              SIZE
mycentos             1.0       122504aa874c   About a minute ago   337MB
redrose2100/centos   1.1       2184c3aadaab   30 hours ago         231MB
nginx                latest    f8f4ffc8092c   4 weeks ago          133MB
mysql                5.7       9f35042c6a98   4 weeks ago          448MB
centos               latest    5d0da3dc9764   6 weeks ago          231MB
[root@iZbp1flzt6x7pxmxfhmxeeZ opt]#

3、测试运行

如下,当前工作目录已经切换到 /usr/local 目录下,JAVA_HOME变量也是有值的,ifconfig命令也支持了

[root@iZbp1flzt6x7pxmxfhmxeeZ opt]# docker run -it mycentos:1.0
[root@b868b5ba93e9 local]# pwd
/usr/local
[root@b868b5ba93e9 local]# echo $JAVA_HOME
/usr/local/jdk_1.8/
[root@b868b5ba93e9 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.3  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:03  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.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

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        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@b868b5ba93e9 local]#
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

redrose2100

您的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值