本文共 1392 字,大约阅读时间需要 4 分钟。
实际生产中,Docker容器创建(或启动)时,默认即启动必要的服务进程,这种用法非常常见。容器中默认即启动的服务往往作为容器的第一个进程启动。如docker run命令创建Tomcat容器时即启动容器中的Tomcat服务。Docker提供了有多种方式实现该特性。
1.执行一个带参数的命令
创建容器时,如果希望默认即执行一个带参数的命令mycommand myparam,利用Dockerfile的ENTRYPOINT和CMD,以及docker run命令的参数,可以有如下多种实现。
1) 方法一,通过Dockerfile的CMD CMD ["mycommand"] ["myparam"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,只需要执行docker run myImage:latest命令即可。2) 方法二,通过Dockerfile的ENTRYPOINT
ENTRYPOINT ["mycommand", "myparam"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,只需要执行docker run myImage:latest命令即可。3) 方法三,通过Dockerfile的ENTRYPOINT和CMD
ENTRYPOINT ["mycommand"] CMD ["myparam"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,只需要执行docker run myImage:latest命令即可。4) 方法四,通过Dockerfile的CMD和docker run命令的参数
#ENTRYPOINT ["not set"] CMD ["anything"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,还需要执行docker run myImage:latest mycommand myparam命令。事实上,Dockerfile中的CMD定义没有任何作用,docker run命令覆盖了CMD并给出了完整的命令和参数。5) 方法五,通过Dockerfile的ENTRYPOINT和docker run命令的参数
ENTRYPOINT ["mycommand"] #CMD ["not set"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,还需要执行docker run myImage:latest myparam命令。事实上,这是docker run追加myparam到Dockerfile中的ENTRYPOINT。6) 方法六,通过docker run --entrypoint="" 命令的参数
ENTRYPOINT ["anything"] CMD ["anything"] 首先,通过Dockerfile构建出镜像myImage:latest。这样,在启动容器时,还需要执行docker run myImage:latest --entrypoint="" /bin/bash mycommand myparam命令。事实上,这是docker run重置了Dockerfile中的ENTRYPOINT。
转载地址:http://ahlai.baihongyu.com/