我正在尝试部署使用docker-compose构建的应用程序,但是感觉好像我朝着完全错误的方向前进。
docker-compose up
.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文件重建容器。
docker-compose.yml
我有一种明显的失落感。我是否应该通过完整的应用程序进行交付,然后在服务器上构建映像?如果要从注册表存储/加载图像,如何开始组成容器?
问题是我在开发和生产中使用了相同的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-compose build
my-private-docker- registry
latest
这只是将映像推送到存储库的一种情况。
docker push 'my-private-docker-registry:latest'
在运行时docker pull,可以安全地停止并使用新映像重新创建正在运行的容器。
docker pull