在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命令的基本使用。
有好的建议,请在下方输入你的评论。