一尘不染

部署docker-compose容器

docker

我正在尝试部署使用docker-compose构建的应用程序,但是感觉好像我朝着完全错误的方向前进。

  1. 我的一切工作都在本地docker-compose up进行-通过适当的网络和主机启动我的应用程序。
  2. 我希望能够在生产机器上运行容器和网络的相同配置,而只是使用不同的.env文件。

我当前的工作流程如下所示:

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文件重建容器。

我有一种明显的失落感。我是否应该通过完整的应用程序进行交付,然后在服务器上构建映像?如果要从注册表存储/加载图像,如何开始组成容器?


阅读 366

收藏
2020-06-17

共1个答案

一尘不染

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

应用程序服务未指定存储库名称或标签,因此当我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和标记构建Web服务映像latest

这只是将映像推送到存储库的一种情况。

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

在运行时docker pull,可以安全地停止并使用新映像重新创建正在运行的容器。

2020-06-17