Dockerfile指令
CMD 命令提供了容器默认执行的命令,即容器启动时默认允许的命令,可以理解为 Windows 系统下的开机启动项,每次启动容器时,CMD 指定的命令都会运行一次。CMD 命令只生效一次,多次使用时,只有最后一个生效。
CMD 命令使用
CMD 命令共有三种格式,分别是:
CMD ["可执行文件","参数1","参数2"]
这个格式用于 exec 执行可执行文件,并提供一个参数,建议使用此方法设置可执行文件。CMD ["参数1","参数2"]
这个格式用于为 ENTRYPOINT 指定参数CMD 命令 参数1 参数2
这个格式用于以 /bin/sh -c 来执行命令,可能会产生无法控制的问题,不建议使用。
常用 CMD 命令
- Nginx 镜像 CMD 命令 :
CMD ["nginx", "-g", "daemon off;"]
- Apache 镜像 CMD 命令 :
CMD ["httpd-foreground"]
- Django 镜像 CMD 命令 :
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
- MySQL 镜像 CMD 命令 :
CMD ["mysqld"]
- NodeJS 镜像 CMD 命令 :
CMD [ "node" ]
- Rails 镜像 CMD 命令 :
CMD ["rails", "server", "-b", "0.0.0.0"]
- Redis 镜像 CMD 命令 :
CMD [ "redis-server" ]
- 当不确定镜像类型时,你可以选择使用如下命令:
CMD ["/usr/sbin/sshd","-D"]
要求:镜像中已安装 sshd 服务。
CMD 命令常见问题
- CMD 命令和 ENTRYPOINT 的区别?
- CMD 命令和 RUN 命令的区别?
CMD 命令可以通过启动时传入的参数被覆盖,而 ENTRYPOINT 无法被覆盖。
CMD 命令是在容器启动时创建的,而 RUN 命令是在容器编译时执行的。
CMD 命令最佳实践
docker run 命令中的参数都会传递给 ENTRYPOINT 指令,而不会被覆盖,当与 CMD 一同使用时,效果更好。 通过 ENTRYPOINT 命令指定容器默认允许的文件如 ENTRYPOINT ["/vhs/kangle/bin/kangle"],通过 CMD 来设置默认的参数 CMD ["-S"]。这样,当执行 docker run -d imagesname 时,就会在启动时自动执行 /vhs/kangle/bin/kangle -S。当我们需要使用其他的参数时,只需要执行 docker run -d imagesname --H,在启动命令后加入新的参数--H,就会自动执行 --H 参数,这时执行的命令就是 /vhs/kangle/bin/kangle --H。这种情况下,处理容器的交互问题就比较方便。
最后更新:2017-01-03 10:48:52