使用docker-compose在服务器上构建多容器泊坞窗图像

时间:2018-06-01 11:03:39

标签: docker docker-compose production

我正在开发一个多服务泊坞窗映像,它在本地工作正常,但在服务器端构建它时遇到问题(可能是知识差距)。一个服务正在运行我的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,还是应该在生产中将此配置完全不同?是否还需要改变其他配置?

1 个答案:

答案 0 :(得分:2)

问题是你不应该为生产构建一个泊坞窗图像。

通常的设置是您构建可在多个环境中运行的映像。 在UAT上,您可以测试此图像,当它正常时,您可以使生产环境停止当前容器,然后根据新图像启动新容器。

要存储图像,您可以使用例如docker registry。

至于你的错误,它们正在发生,因为在你执行docker-compose build的机器上你没有db_config文件。与将组合上传到生产的必要性类似,为了在生产环境中构建图像,您需要提供构建所需的所有必要项目文件。

如果你想做到"清洁"然后正确的方法是在构建环境中构建映像,将映像推送到注册表,然后在生产中进行部署。

是的,对于生产部署,您需要撰写文件。但是,您不需要进行构建。如果可以访问docker注册表,则应首先停止正在运行的容器,然后再次启动它们。

如果您使用swarm,它应该更容易,因为swarm会检查容器是否有更新的图像库,并且只有在需要更新图像时才会停止它们。