48-Dockerfile-CMD/ENTRYPOINT指令

简介: 48-Dockerfile-CMD/ENTRYPOINT指令

前言

  • 本篇来学习下Dockerfile中的CMD/ENTRYPOINT指令

CMD

作用

  • 启动容器时默认执行的命令

说明:

  • 一个 Dockerfile 只有一个 CMD 指令,只有最后一个 CMD 指令生效
  • 使用 docker run -d xxx CMD 命令是可以覆盖 Dockerfile 中的 CMD 指令的

格式

# exec 方式, 首选方式  CMD ["可执行命令", "参数1", "参数2"...]
CMD ["executable","param1","param2"]
# 为 ENTRYPOINT 提供默认参数
CMD ["param1","param2"]
# shell 形式  CMD 命令 参数1  参数2
CMD command param1 param2

使用示例

  • 新建dockerfile
FROM ubuntu
#  CMD 和 ENTRYPOINT 作为唯一入口,写多个,只有最后一个生效
# shell方式
CMD ping bing.com
# exec方式
CMD [ "sh", "-c", "echo $HOME" ]
  • 制作镜像
docker build -t test --force-rm --no-cache .
  • 运行容器
# --rm 表示容器退出,自动删除
docker run -it --rm test
  • 可以看到只执行了后面的echo $HOME,没执行ping 命令

ENTRYPOINT

作用

  • 指定镜像的默认入口命令,该入口命令会在启动容器时作为根命令执行,所有其他传入值作为该命令的参数

说明:

  • 一个 Dockerfile 只有一个 ENTRYPOINT 指令,只有最后一个 ENTRYPOINT 指令生效

格式

# exec 格式
ENTRYPOINT ["executable", "param1", "param2"]
# shell 格式
ENTRYPOINT command param1 param2

使用示例

  • 新建dockerfile
FROM ubuntu
#  CMD 和 ENTRYPOINT 作为唯一入口,写多个,只有最后一个生效
# shell方式
ENTRYPOINT ping baidu.com
# exec方式
ENTRYPOINT [ "sh", "-c", "echo $HOME" ]
  • 制作镜像
docker build -t test --force-rm --no-cache .
  • 运行容器
docker run -it --rm test

CMD/ENTRYPOINT区别

  • CMD :指定这个容器启动的时候要运行的命令,会覆盖原命令,不可以追加命令
  • ENTRYPOINT :指定这个容器启动的时候要运行的命令,可以追加命令

CMD使用示例

  • dockerfile
FROM ubuntu
CMD ["ls","-a"]
  • 制作镜像
docker build -t test --force-rm --no-cache .
  • 运行容器
# 覆盖 ls -a; -l命令是不存在的,所以会报错
docker run -it --rm test -l

ENTRYPOINT使用示例

  • dockerfile
FROM ubuntu
ENTRYPOINT ["ls","-a"]
  • 制作镜像
docker build -t test --force-rm --no-cache .
  • 运行容器
# 会追加命令 相当于执行  ls  -a -l
docker run -it --rm test -l

相关文章
|
NoSQL 关系型数据库 MySQL
Dockerfile(9) - ENTRYPOINT 指令详解
Dockerfile(9) - ENTRYPOINT 指令详解
832 0
|
2月前
|
JSON Java Shell
Dockerfile中RUN、CMD、ENTRYPOINT、SHELL命令的区别
理解这些指令的差异和应用场景,有助于构建高效、灵活且易于管理的Docker镜像。在实际应用中,根据需要选择合适的指令,可以有效地控制镜像构建和容器运行的行为。
212 0
|
6月前
|
Shell Docker Python
Dockerfile中的CMD和ENTRYPOINT
**Dockerfile 中的 `CMD` 和 `ENTRYPOINT` 用于设定容器启动行为。`CMD` 提供默认命令,可被 `docker run` 覆盖;`ENTRYPOINT` 设置不可变的入口点,其参数与 `CMD` 结合使用。两者皆有两种语法格式:数组和字符串。`ENTRYPOINT` 与 `CMD` 结合允许用户覆盖默认参数,但若需替换 `ENTRYPOINT`,需使用 `--entrypoint`。**
188 0
|
7月前
|
JSON 物联网 Shell
Dockerfile指令详解
Dockerfile指令详解
135 0
Dockerfile(3) - WORKDIR 指令详解
Dockerfile(3) - WORKDIR 指令详解
1053 0
|
Linux 开发工具 Docker
【docker】CMD和ENTRYPOINT的区别
【docker】CMD和ENTRYPOINT的区别
|
Docker 容器
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
本文是博主学习docker 制作镜像指令的记录,希望对大家有所帮助
199 0
Dockerfile文件中CMD指令与ENTRYPOINT指令的区别
|
Shell Docker 容器
Docker - Run & CMD & Entrypoint
Docker - Run & CMD & Entrypoint
155 0
|
应用服务中间件 Shell nginx
Dockerfile(7) - ENV 指令详解
Dockerfile(7) - ENV 指令详解
2106 0
Dockerfile(7) - ENV 指令详解
|
存储 应用服务中间件 调度
Dockerfile(12) - HEALTHCHECK 指令详解
Dockerfile(12) - HEALTHCHECK 指令详解
419 0
Dockerfile(12) - HEALTHCHECK 指令详解