Docker|Docker -- entrypoint与cmd解析
entrypoint和cmd用在dockerfile中,它们都可以指定容器启动时运行的命令,在使用时,通常用entrypoint指定命令,cmd指定命令参数。
exec和shell
entrypoint和cmd的写法:exec模式、shell模式
exec模式:[]的写法,推荐使用
FROM ubuntu
CMD [ "top" ]
容器运行时,top命令是1号进程。
shell模式:/bin/sh -c "cmd"的写法
FROM ubuntu
CMD top
容器运行时,sh是1号进程,top是sh创建的子进程。
典型用法:CMD 简单的可以在CMD中指定:命令和参数
FROM ubuntu
EXPOSE 8080
CMD [ "nginx", "-s", "reload" ]
典型用法:EntryPoint + CMD (推荐) 【Docker|Docker -- entrypoint与cmd解析】通用的方法,在EntryPoint中指定命令,在CMD中指定参数
# prometheus通过CMD指定运行参数
USERnobody
EXPOSE9090
VOLUME[ "/prometheus" ]
WORKDIR/prometheus
ENTRYPOINT [ "/bin/prometheus" ]#exec写法:指定命令
CMD[ "--config.file=/etc/prometheus/prometheus.yml", \
"--storage.tsdb.path=/prometheus", \
"--web.console.libraries=/usr/share/prometheus/console_libraries", \
"--web.console.templates=/usr/share/prometheus/consoles" ]#exec写法:指定参数
典型用法:kubernetes 在pod的spec中,可以通过command参数覆盖镜像中的EntryPoint参数:
# kubectl explain pod.spec.containers.command
DESCRIPTION:
Entrypoint array. Not executed within a shell. The docker image's
ENTRYPOINT is used if this is not provided.
在pod的spec中,可以通过args参数覆盖镜像中的CMD参数:
# kubectl explain pod.spec.containers.args
DESCRIPTION:
Arguments to the entrypoint. The docker image's CMD is used if this is not
provided.
所以,为了业务应用的image可以在kubernetes上运行,推荐在镜像的dockerfile中:entrypoint指定命令,cmd指令参数,以便在运行时可以灵活覆盖。
比如Prometheus的container在kubernetes中运行时,使用args覆盖镜像中的CMD参数:
......
spec:
containers:
- args:
- --web.console.templates=/etc/prometheus/consoles
- --web.console.libraries=/etc/prometheus/console_libraries
- --config.file=/etc/prometheus/config_out/prometheus.env.yaml
- --storage.tsdb.path=/prometheus
- --storage.tsdb.retention.time=24h
- --web.enable-lifecycle
- --storage.tsdb.no-lockfile
- --web.route-prefix=/
image: 178.104.162.39:443/dev/huayun/amd64/prometheus:v2.20.0
imagePullPolicy: IfNotPresent
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- Docker应用:容器间通信与Mariadb数据库主从复制
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 第326天
- Shell-Bash变量与运算符
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法
- 我和你之前距离
- CGI,FastCGI,PHP-CGI与PHP-FPM
- 原生家庭之痛与超越