我正在开发一个多服务泊坞窗映像,它在本地工作正常,但在服务器端构建它时遇到问题(可能是知识差距)。一个服务正在运行我的mysql数据库,而另一个是我的主应用程序(每个都有自己的Dockerfile,虽然我认为已经给出了),都通过docker-compose链接并使用depends_on首先运行setup mysql并确保它#&## 39;处于健康状态。
我已成功在本地构建和运行映像,并在推送到docker hub后将其拉到服务器,但无法找到有关如何正确使用docker-compose.yml的任何指导生产中的文件。我花了一段时间才意识到我需要将docker-compose文件单独上传到制作中,但现在我对这个' build'设置。
在本地,我使用的docker-compose.yml文件类似于下面的文件,其中包含' build'设置指向项目目录中的db_config文件夹。
version: '2.1'
services:
mysql:
image: username/my_image:latest
container_name: db
build: ./db_config
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_USER: "dbuser"
MYSQL_PASSWORD: "12345"
MYSQL_DATABASE: "my_db"
healthcheck:
test: "exit 0"
my_app:
container_name: app
build: .
depends_on:
mysql:
condition: service_healthy
entrypoint:
- /usr/local/bin/docker-entrypoint.sh
ports:
- "80:8080"
尝试在生产中使用此文件构建(docker-compose build
)会出现以下错误(名称已更改):
构建路径/ home / user / my_app / db_config要么不存在,要么不存在 可访问的,或者不是有效的URL。
应该构建什么'在生产中指向?我应该以某种方式指向docker镜像本身中的Dockerfile,还是应该在生产中将此配置完全不同?是否还需要改变其他配置?
答案 0 :(得分:2)
问题是你不应该为生产构建一个泊坞窗图像。
通常的设置是您构建可在多个环境中运行的映像。 在UAT上,您可以测试此图像,当它正常时,您可以使生产环境停止当前容器,然后根据新图像启动新容器。
要存储图像,您可以使用例如docker registry。
至于你的错误,它们正在发生,因为在你执行docker-compose build的机器上你没有db_config文件。与将组合上传到生产的必要性类似,为了在生产环境中构建图像,您需要提供构建所需的所有必要项目文件。
如果你想做到"清洁"然后正确的方法是在构建环境中构建映像,将映像推送到注册表,然后在生产中进行部署。
是的,对于生产部署,您需要撰写文件。但是,您不需要进行构建。如果可以访问docker注册表,则应首先停止正在运行的容器,然后再次启动它们。
如果您使用swarm,它应该更容易,因为swarm会检查容器是否有更新的图像库,并且只有在需要更新图像时才会停止它们。