• dockerfile 中的CMD 和 ENTRYPOINT 的区别


    十年河东,十年河西,莫欺少年穷

     学无止境,精益求精

    前面两篇博客描述了dockerfile基础及自定义dockerfile,今日来个小练习

    前面两篇博客为:dockerfile【命令脚本】 构建镜像基础知识  、  docker 镜像的生成方式,初识dockerfile,dockerfile 指定匿名挂载

    CMD 采取的是替换策略,ENTRYPOINT 采取的追加策略

    练习 1

    使用CMD命令编写一个简易的dockerfile

    FROM centos
    MAINTAINER wolong.Chen<chenwolong2022@163.com>
    CMD ["ls","-a"]

    2、构建镜像

    docker build -f dockerfile01 -t cmdtest .

    2.1、构建过程如下:

    Sending build context to Docker daemon  3.072kB
    Step 1/3 : FROM centos
     ---> 5d0da3dc9764
    Step 2/3 : MAINTAINER wolong.Chen<chenwolong2022@163.com>
     ---> Running in 980f186a8d7f
    Removing intermediate container 980f186a8d7f
     ---> 4692e342d894
    Step 3/3 : CMD ["ls","-a"]
     ---> Running in e56481f6d5f7
    Removing intermediate container e56481f6d5f7
     ---> d0e4226cd576
    Successfully built d0e4226cd576
    Successfully tagged cmdtest:latest

    3、查看构建的镜像

    docker images

     4、运行镜像

    docker run d0e4226cd576

    5、说明

    此镜像直接以centos为基础镜像,并通过CMD执行 ls -a 命令

    6、执行如下命令是否能运行cmdtest镜像

    docker run d0e4226cd576 -l

    因为镜像中会执行 ls -a 命令,我们运行时加上 -l 是希望直接运行 ls -al 命令,此时容器是否能成功执行呢?

    答案是执行报错,报错信息如下:

    docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
    ERRO[0001] error waiting for container: context canceled 

    大致意思是 -l 不是一条有效的命令

    因此,也证明了CMD采取的并非追加策略,而是替换策略

    练习 2

    使用ENTRYPOINT命令编写一个简易的dockerfile

    此时只需将我们的dockerfile 中的cmd 替换为 ENTRYPOINT 即可

    编写dockerfile 如下:

    FROM centos
    MAINTAINER wolong.Chen<chenwolong2022@163.com>
    ENTRYPOINT ["ls","-a"]

    构建镜像

    docker build -f dockerfile01 -t  enttest .

    执行镜像 ,并在后面追加命令参数 -l

    docker run 8a2063322a2e -l

    执行结果:

     由此可见 CMD 属于命令替换,而 ENTRYPOINT 属于命令追加

    @天才卧龙的波尔克

  • 相关阅读:
    30个在线学习设计与开发的站点
    马云:你的一生到底该往哪个方向走?
    那些争议最大的编程观点
    Python 标识符
    Python 环境搭建
    Python 简介
    PyCharm 使用技巧
    Shell脚本———— /dev/null 2>&1详解
    linux 创建连接命令 ln -s 软链接
    scp命令详解
  • 原文地址:https://www.cnblogs.com/chenwolong/p/16129813.html
Copyright © 2020-2023  润新知