Yus*_*sif 8 docker dockerfile docker-compose
有什么不同?
哪个是首选?
如果定义了命令,是否应该省略 CMD?
Dav*_*aze 18
在常见情况下,您应该有一个 DockerfileCMD
而不是 Compose command:
。
command:
Compose 文件中的内容会覆盖CMD
Dockerfile 中的内容。有一些细微的语法差异(值得注意的是,Compose 永远不会自动sh -c
为您插入 shell 包装器),但它们在容器元数据中控制相同的内容。
但是,请记住,除了 Compose 之外,还有其他方式来运行容器。 docker run
不会读取您的docker-compose.yml
文件,因此不会看到该command:
行;它也不会在 Kubernetes 等工具中读取。如果你把它融入CMD
到形象中,它就会在所有这些地方受到尊重。
command:
如果您需要为容器启动非默认主进程,则确实需要覆盖。
想象一下您正在构建一个 Python 应用程序。您可能有一个主 Django 应用程序和一个 Celery Worker,但它们具有基本相同的源代码。因此,对于此设置,您可以使图像CMD
启动 Django 服务器,并覆盖command:
以在同一图像上运行 Celery 工作程序。
# Dockerfile
# ENTRYPOINT is not required
CMD ["./manage.py", "runserver", "0.0.0.0:8080"]
Run Code Online (Sandbox Code Playgroud)
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports: ['8080:8080']
# no command:
worker:
build: .
command: celery worker
Run Code Online (Sandbox Code Playgroud)
ara*_*sch 10
command
覆盖CMD
in dockerfile
. 如果你能控制dockerfile
自己,就把它放在那里。这是最干净的方式。
如果您想测试某些内容或需要在开发时更改,CMD
它比总是更改dockerfile
并重建映像要快。
或者,如果它是预构建的图像,并且您不想FROM ...
仅仅为了更改而构建派生图像,那么CMD
这也是一个快速解决方案command
。
归档时间: |
|
查看次数: |
7530 次 |
最近记录: |