部署docker-compose容器

时间:2017-01-26 10:55:46

标签: docker docker-compose

我正在尝试部署一个使用docker-compose构建的应用程序,但感觉我的方向完全错误。

  1. 我让一切都在本地工作 - docker-compose up使用适当的网络和主机启动我的应用程序。
  2. 我希望能够在生产计算机上运行相同的容器和网络配置,只需使用不同的.env文件。
  3. 我目前的工作流程如下所示:

    docker save [web image] [db image] > containers.tar
    zip deploy.zip containers.tar docker-compose.yml
    rsync deploy.zip user@server
    
    ssh user@server
    unzip deploy.zip ./
    docker load -i containers.tar
    
    docker-compose up
    

    此时,我希望能够再次运行docker-compose up,但是会尝试按照docker-compose.yml文件重建容器。

    我有一种明显的感觉,我错过了一些东西。我应该通过我的完整应用程序发货,然后在服务器上构建图像吗?如果从注册表中存储/加载图像,您将如何启动合成容器?

1 个答案:

答案 0 :(得分:4)

问题是我在开发和生产中使用了相同的docker-compose.yml文件。

app服务没有指定存储库名称或标记,所以当我在服务器上运行docker-compose up时,它只是尝试在我的应用程序的源代码目录中构建Dockerfile(它不存在于服务器)。

我最后通过向本地docker-compose.yml添加显式图像字段来解决问题。

version: '2'
services:
  web:
    image: 'my-private-docker-registry:latest'
    build: ./app

然后为生产创建了另一个撰写文件:

version: '2'
services:
  web:
    image: 'my-private-docker-registry:latest'
    # no build field!

在本地运行docker-compose build后,将使用存储库名称my-private-docker-registry和标记latest构建Web服务映像。

然后,这只是将图像推送到存储库的情况。

docker push 'my-private-docker-registry:latest'

运行docker pull,使用新图像停止并重新创建正在运行的容器是安全的。