部署docker-compose容器

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

  1. 我拥有在本地工作的所有东西 – docker docker-compose up将我的应用程序与适当的networking和主机配合使用。
  2. 我希望能够在生产计算机上运行相同的容器和networkingconfiguration,只需使用不同的.env文件即可。

我目前的工作stream程如下所示:

 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 up ,但是会根据docker-compose.yml文件尝试重build容器。

我感觉到我失去了一些东西。 我应该通过我的完整应用程序出货,然后在服务器上build立图像吗? 如果您要从registry中存储/加载图像,您将如何启动组合容器?

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

应用程序服务没有指定存储库名称或标记,因此当我在服务器上运行docker-compose up ,它只是试图在我的应用程序的源代码目录(服务器上不存在)中构buildDockerfile。

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

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

然后创build一个替代的生产文件:

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

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

那么这只是将图像推送到存储库的一个例子。

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

并运行docker pull ,可以安全地停止和重新创build正在运行的容器,与新的图像。