部署docker-compose容器
我正在尝试部署一个使用docker-compose构build的应用程序,但感觉就像我完全走错了方向。
- 我拥有在本地工作的所有东西 – docker
docker-compose up
将我的应用程序与适当的networking和主机配合使用。 - 我希望能够在生产计算机上运行相同的容器和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正在运行的容器,与新的图像。