Dockerfile体系结构之保留字指令

Dockerfile体系结构之保留字指令

保留字指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的。
  • MAINTAINER:镜像维护者的姓名和邮箱地址。
  • RUN:容器构建时需要运行的命令。
  • EXPOSE:当前容器对外暴露出的端口。
  • VOLUME:容器数据卷,用于数据保存和持久化工作。
  • WORKDIR:指定工作目录。指定在创建容器后,终端默认登录进容器后的工作目录。
  • ENV:用来在构建镜像过程中设置环境变量。
  • ARG:构建参数,与ENV作用一致。不过作用域不一样。ARG设置的环境变量仅对Dockerfile内有效,只有docker build的过程中有效,构建好的镜像内不存在此环境变量。
  • ADD:ADD指令和COPY的使用类似(同样需求下,官方推荐使用COPY)将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和tar压缩包。
    • 区别:ADD的优点:在执行<源文件>为tar压缩文件的话,压缩格式为gzip,bzip2及xz的情况下,会自动复制并解压到<目标路径>。 ADD的缺点:在不解压的前提下,无法复制tar压缩文件,会令镜像构建缓存失效,从而可能会令镜像构建变得比较缓慢。
  • COPY:复制命令,从上下文目录中复制文件或者目录到容器里的指定路径。
  • CMD:类似于run指令,用于指定一个容器启动时运行的命令,但二者运行的时间点不同:
    • CMD:在docker run 时运行。
      RUN:在docker build 。
      CMD会被docker run之后的参数替换。
      如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
  • ENTRYPOINT:类似于CMD指令,但其不会被docker run命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数追加给ENTRYPOINT指令指定的程序。如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
  • ONBUILD:用于延迟构建命令的执行。当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发。
  • USER:用于指定执行后续命令的用户和用户组,这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。
  • HEALTHCHECK:用于指定某个程序或着指令来监控docker容器服务的运行状态。
  • LABEL:LABEL指令用来给镜像添加一些元数据(metadata),以键值对的形式。
  • .dockerignore:忽略掉你不想追踪的文件。.dockerignore 文件的作用Dockerfile体系结构之保留字指令

Dockerfile参考文档

案例

Base镜像(scratch)

Docker hub中 99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的。

自定义镜像mycentos

自定义mycentos目的是我们自己的镜像具备如下:

  • 登录后的默认路径
  • vim编辑器
  • 查看网络配置ifconfig支持

1、编写
FROM centos
MAINTAINER yyds<123@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "success------------>>ok"
CMD /bin/bash
2、构建
docker build -f Dockerfile文件名 -t 新镜像名字:TAG .
Dockerfile体系结构之保留字指令
3、运行
docker images 新镜像名字:TAG
docker run -it 新镜像名字:TAG
4、列出镜像的变更历史
docker history 镜像ID

构建镜像

PS D:\opt\work> docker build -f .\Dockerfile -t mycentos:2.0 .
[+] Building 24.9s (8/8) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                   0.0s
 => => transferring dockerfile: 265B                                                                                                                                   0.0s
 => [internal] load .dockerignore                                                                                                                                      0.0s
 => => transferring context: 2B                                                                                                                                        0.0s
 => [internal] load metadata for docker.io/library/centos:latest                                                                                                       0.0s
 => CACHED [1/4] FROM docker.io/library/centos                                                                                                                         0.0s
 => [2/4] WORKDIR /usr/local                                                                                                                                           0.0s
 => [3/4] RUN yum -y install vim                                                                                                                                      20.9s
 => [4/4] RUN yum -y install net-tools                                                                                                                                 3.2s
 => exporting to image                                                                                                                                                 0.7s
 => => exporting layers                                                                                                                                                0.7s
 => => writing image sha256:58560ac56116cdcc750f20b40a2edef2b77ac5598c4e752b651a67a25a076b9b                                                                           0.0s
 => => naming to docker.io/library/mycentos:2.0                                                                                                                        0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

-------------------查看构建的镜像----------------------------
PS D:\opt\work> docker images mycentos
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
mycentos     2.0       58560ac56116   2 minutes ago   311MB

---------------------------------查看镜像功能是否制作成功-------------------------------------------------------
PS D:\opt\work> docker run -it -d mycentos:2.0
155b6b5d5e34a3d5d37d11d9b942fb5ce2b9b9efe03c3419a92c49509c964af5
PS D:\opt\work> docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
155b6b5d5e34   mycentos:2.0   "/bin/sh -c /bin/bash"   4 seconds ago   Up 3 seconds   80/tcp    compassionate_joliot
PS D:\opt\work> docker exec -it 155b6b5d5e34 bash
[root@155b6b5d5e34 local]# pwd
/usr/local
[root@155b6b5d5e34 local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 16  bytes 1312 (1.2 KiB)
        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@155b6b5d5e34 local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@155b6b5d5e34 local]# touch 1.txt
[root@155b6b5d5e34 local]# echo 123 > 1.txt
[root@155b6b5d5e34 local]# vim 1.txt

-------------------------列出镜像的变更历史------------------------------------------------------
PS D:\opt\work> docker images mycentos
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mycentos     2.0       58560ac56116   3 days ago   311MB
PS D:\opt\work> docker history 58560ac56116
IMAGE          CREATED        CREATED BY                                      SIZE      COMMENT
58560ac56116   3 days ago     CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      3 days ago     CMD ["/bin/sh" "-c" "echo \"success---------…   0B        buildkit.dockerfile.v0
<missing>      3 days ago     CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
<missing>      3 days ago     EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      3 days ago     RUN /bin/sh -c yum -y install net-tools # bu…   14.8MB    buildkit.dockerfile.v0
<missing>      3 days ago     RUN /bin/sh -c yum -y install vim # buildkit    64.8MB    buildkit.dockerfile.v0
<missing>      3 days ago     WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
<missing>      3 days ago     ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
<missing>      3 days ago     MAINTAINER yyds<tongh852@163.com>               0B        buildkit.dockerfile.v0
<missing>      3 months ago   /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>      3 months ago   /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B
<missing>      3 months ago   /bin/sh -c #(nop) ADD file:805cb5e15fb6e0bb0…   231MB

CMD/ENTRYPOINT镜像案例

自定义镜像Tomcat9

总结

上一篇:Ubuntu中部署Weave


下一篇:Value类型-groupBy()分组