docker(九)dockerfile(五)CMD和ENTRYPOINT命令

98 阅读2分钟

在Dockerfile中,定义变量,复制文件我们都学完了,接下来,我们来学习一下,在容器中执行命令的命令。

这里docker为我们提供了两个命令CMD和ENTRYPOINT。

 

一:CMD命令

1:在Dockerfile中编写了多条CMD命令的时候,默认执行最后一条CMD命令

 

2:CMD默认执行的命令:

docker container run

 

那么我们如何能覆盖CMD的默认执行命令呢?很简单,就是在运行容器的时候在命令后边加上你要执行的命令:

docker container run -it xxxx ipinfo version

上方命令中的ipinfo version就是我们要执行的命令

 

3:编写CMD命令

(1):Exec格式(推荐这么写)

用上边的命令来做例子:

CMD [“ipinfo”,”version”]  # 这里要使用双引号

 

(2):shell格式

CMD ipinfo version

 

上方两种写法都可以!

 

二:ENTRYPOINT

ENTRYPOINT在指定要执行的命令及其参数方面与CMD相似。

(1):Exec格式:

ENTRYPOINT ["executable""param1""param2"] 这是ENTRYPOINT推荐使用的格式。

 

(2):Shell格式:会忽略CMD或docker run提供的任何参数。

ENTRYPOINT command param1 param2

 

三:CMD和ENTRYPOINT区别

1:Dockerfile中的CMD命令可以在运行容器时被覆盖,ENTRYPOINT是不会被覆盖的,一定会执行

(1):新建Dockerfile.cmd文件:

# 安装Ubuntu系统
FROM ubuntu:latest
CMD ["echo","hello guanchao.site"]

 

构建容器:

docker image build -f /usr/local/docker/Dockerfile.cmd -t testcmd:1.0 .

 

运行容器:

docker container run -it testcmd:1.0

输出:

hello guanchao.site

 

我们覆盖一下Dockerfile.cmd中的命令,运行如下命令:

docker container run -it testcmd:1.0 echo hello world

输出:

hello world

 

(2):新建Dockerfile.enter文件

构建容器:

docker image build -f /usr/local/docker/Dockerfile.enter -t testenter:1.0 .

 

运行容器:

docker container run -it testenter:1.0

输出:

hello guanchao.site.ENTRYPOINT

 

2:CMD和ENTRYPOINT是可以联合执行的。

修改Dockerfile.enter文件:

# 安装Ubuntu系统
FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["hello guanchao.site.cmd"]

 

构建容器:

docker image build -f /usr/local/docker/Dockerfile.enter -t testenter:1.0 .

 

运行容器:

docker container run -it testenter:1.0

输出:

hello guanchao.site.cmd

 

3:cmd 执行的命令可以作为ENTRYPOINT使用

小小的再修改一下Dockerfile.enter文件

# 安装Ubuntu系统
FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["ipinfo","version"]

 

构建容器:

docker image build -f /usr/local/docker/Dockerfile.enter -t testenter:1.0 .

 

运行容器:

docker container run -it testenter:1.0

输出:

ipinfo version

 

再小小的修改一下Dockerfile.enter文件:

# 安装Ubuntu系统
FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD []

 

构建容器:

docker image build -f /usr/local/docker/Dockerfile.enter -t testenter:1.0 .

 

运行容器:

docker container run -it testenter:1.0 echo guanchao.site

输出:

echo guanchao.site

 

ENTRYPOINT命令多少有点残暴啊。

 

以上大概就是CMD和ENTRYPOINT命令的基本使用。

 

有好的建议,请在下方输入你的评论。