如何使用docker-compose运行Docker映像?

时间:2018-11-21 16:56:25

标签: docker nginx flask docker-compose dockerfile

我有在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

1 个答案:

答案 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)对齐。

服务器将自动下拉图像并运行它。您可以使用标签来宣传新图片,但在这种情况下,您还必须杀死旧容器。