docker之CMD, ENTRYPOINT, RUN使用和对比

本文详细介绍了Dockerfile中CMD、RUN和ENTRYPOINT的用法。CMD定义容器启动默认命令,可被启动时指定的命令覆盖;RUN用于构建镜像时执行命令,如安装软件;ENTRYPOINT则在容器启动时始终执行,不受启动命令影响。通过示例展示了如何构建和运行Docker镜像及容器。

CMD

CMD命令是在容器启动后执行的命令,一个Dockerfile可以有多个CMD,但是只有最后一个CMD生效。当容器启动时如果指定了命令,那么CMD的命令将被忽略。

写一个Dockerfile

FROM alpine:latest
WORKDIR /workdir
ENV  name "Docker"
CMD  echo $name

生成新的镜像 secondtonone1/alpine-cmd 

docker build -t secondtonone1/alpine-cmd .
生成后生成容器

docker run --rm --name cmd secondtonone1/alpine-cmd

可以看到输出docker了 

接下来我们在容器启动时后边增加一个命令

docker run --rm -it --name cmd secondtonone1/alpine-cmd sh

此时进入了容器内部,执行了sh命令。Dockerfile中的cmd被忽略了。 

RUN

run命令是在构建镜像时执行的命令,我们可以安装一些应用。

FROM ubuntu:18.04
WORKDIR /workdir
RUN  apt-get update
RUN  apt-get install -y net-tools
CMD  netstat

生成镜像 

docker build -f Dockerfile -t cmd2 .

生成容器并启动 

docker run -it --rm  cmd2

可以看到容器启动后调用了cmd命令netstat 

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path

ENTRYPOINT

ENTRYPOINT 和CMD不同,他不会被docker启动后执行的命令覆盖

FROM ubuntu:18.04
WORKDIR /workdir
RUN  apt-get update
RUN  apt-get install -y net-tools
ENTRYPOINT  netstat

生成镜像 

docker build -f Dockerfile -t cmd3 .

生成容器并启动 

docker run -it --rm  cmd3 /bin/bash

可以看到容器启动后并没有执行/bin/bash命令,而是调用了ENTRYPOINT命令netstat 

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path

RUN和CMD支持参数形式命令
 

FROM ubuntu:18.04
WORKDIR /workdir
ENV  name "Docker"
RUN  ["/bin/bash", "-c", "apt-get update"] 
RUN  ["/bin/bash", "-c", "apt-get install -y net-tools"] 
CMD  ["/bin/bash","-c","echo Hello $name !"]

生成镜像

docker build -f ./Dockerfile -t cmd4 .

运行容器 

docker run -it --rm cmd4

可以看到输出了Hello, Docker! 

感谢关注我的公众号

wxgzh.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

恋恋风辰

感谢打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值