我有在Docker Compose下运行的Flask应用程序,其中有2个容器用于Flask,另一个用于Nginx。
我可以在本地计算机上使用docker-compose up --build -d
命令成功运行Flask。
我想要的是,将图像保存到.tar.gz文件中,然后将其移动到生产服务器并自动运行。我已使用下面的Bash脚本成功将Flask和Nginx保存到一个图像中。
#!/bin/bash
for img in $(docker-compose config | awk '{if ($1 == "image:") print $2;}'); do
images="$images $img"
done
docker save $images | gzip -c > flask_image.tar.gz
然后,我将此映像flask_image.tar.gz
移到安装了Docker的生产服务器上,并使用以下命令加载该映像并运行容器。
docker load -i flask_image.ta.gz
此命令加载每个图层并将图像加载到我的生产服务器中。但是容器没有达到预期的效果,因为我只使用了load命令。
我的问题是,是否有任何命令可以自动加载图像并提升容器?
docker-compose.yml
version: '3'
services:
api:
container_name: flask
image: flask_img
restart: always
build: ./app
volumes:
- ~/docker_data/api:/app/uploads
ports:
- "8000:5000"
command: gunicorn -w 1 -b :5000 wsgi:app -t 900
proxy:
container_name: nginx
image: proxy_img
restart: always
build: ./nginx
volumes:
- ~/docker_data/nginx:/var/log/nginx/
ports:
- "85:80"
depends_on:
- api
答案 0 :(得分:0)
由于您提到您已经将Docker映像推送到Docker Hub,这意味着该映像具有一个dockerhub标签,您也可以使用它来拉取它。
通常,我使用类似这样的方法来提取注册表上的图像:
docker run --rm -d --restart=always -p 80:8080 my-dockerhub-user/my-image-name:my-tag
,它将在守护程序模式下运行容器,并在失败时重新启动。这只是一个例子。您希望端口与正在监听的烧瓶(在我的示例中为8080
)和服务器应在监听的服务器(在本示例中为80
)对齐。
服务器将自动下拉图像并运行它。您可以使用标签来宣传新图片,但在这种情况下,您还必须杀死旧容器。