3 回答
TA贡献1847条经验 获得超11个赞
最佳实践是将它们作为三个独立的容器启动。这是双重正确的,因为您正在使用三个独立的应用程序,将它们捆绑到一个容器中,然后尝试从中启动三个独立的东西。
在您的每个项目子目录中创建一个单独的 Dockerfile。这些可以更简单,特别是对于只包含已编译二进制文件的
# execproject/Dockerfile
FROM ubuntu:18.04
WORKDIR /app
COPY . ./
CMD ["./gowebapp"]
然后在您的docker-compose.yml文件中有三个单独的节来启动容器
version: '3'
services:
pythonic_project1:
build: ./pythonic_project1
ports:
- 8008:8008
env:
PY2_URL: 'http://pythonic_project2:8009'
GO_URL: 'http://execproject:8010'
pythonic_project2:
build: ./pythonic_project2
execproject:
build: ./execproject
如果你真的不能重新排列你的 Dockerfiles,你至少可以从docker-compose.yml文件中的同一个镜像启动三个容器:
services:
pythonic_project1:
build: .
workdir: /app/pythonic_project1
command: ./__main__.py
pythonic_project2:
build: .
workdir: /app/pythonic_project1
command: ./__main__.py
使用多个容器和图像构建项目有几个很好的理由:
如果您运行自己的 shell 脚本并使用后台进程(就像其他答案一样),它只是不会注意到其中一个进程是否死亡;在这里你可以使用 Docker 的重启机制来重启单个容器。
如果您对其中一个程序进行了更新,则只能更新并重新启动该单个容器,而其余部分保持不变。
如果您使用过更复杂的容器编排器(Docker Swarm、Nomad、Kubernetes),不同的组件可以在不同的主机上运行,并且在单个节点上需要较小的 CPU/内存资源块。
如果您使用过更复杂的容器编排器,您可以单独扩展使用更多 CPU 的组件。
添加回答
举报