ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Dockerfile体系结构之保留字指令

2021-12-27 16:01:29  阅读:224  来源: 互联网

标签:ago bin 0.0 CMD 镜像 docker 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 .
在这里插入图片描述
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

总结

标签:ago,bin,0.0,CMD,镜像,docker,Dockerfile,保留字,体系结构
来源: https://blog.csdn.net/weixin_45364386/article/details/122125110

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有