Docker映像:如何在开发和生产之间进行管理

时间:2018-10-19 09:42:59

标签: docker docker-compose

假设根据DJANGO project中给出的示例,我使用docker-compose创建了一个https://docs.docker.com/compose/django/

下面是一个简单的docker-compose.yml文件,用于了解缘故

docker-compose.yml

version: '3'    
services:
  db:
    image: postgres
  web:
    image: python:3
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

在这里,我使用了两个图像python:3(称为"web")和postgres(称为"db"),它们是从hub.docker.com中自动找到并进行相应构建的。我们还希望web container依赖于db container。只是为了回忆上面docker-compose.yml

中的内容

一旦我完成所有设置,docker-compose up就可以看到两个containers正在运行,并且django项目正在我的本地计算机上运行。

一旦我使用了django应用程序,现在我想在生产服务器上进行部署。

所以如何将映像复制到开发服务器,以便我也在那里再次处理相同的docker映像。

因为我尝试在生产服务器上创建docker-compose.yml文件,所以数据库映像和Web映像可能会更改。

赞:

当我在开发计算机上构建postgres映像时,说我有postgres version 9.5

但是,如果我再次在生产服务器上构建postgres映像,则可能安装了postgres version 10.1

所以我不会在同一环境上工作,可能在同一操作系统上,但在同一版本的软件包上。

所以当我将事情转移到开发阶段时如何检查这一点

部分解决:

根据@Yogesh_D的答案,

如果我使用的是来自Dokcer hub的预构建映像,我们可以使用postgres:9.5.1或python:3等版本号轻松在生产服务器上获得相同的环境。

部分未解决:

但是如果我使用自己的Dockerfile自己创建了映像,然后在构建时对其进行了标记。现在我想在生产中使用相同的图像该怎么做。由于它不在Docker Hub上,我也可能不希望将其放在Docker Hub上。

因此,将我的映像手动复制到生产服务器是一个好主意,或者我只是复制Dockerfile并再次在生产服务器上构建映像。

1 个答案:

答案 0 :(得分:0)

这应该非常简单,因为docker compose image指令甚至可以为该图像指定标签。 因此,在您的情况下,将是这样的:

version: '3'    
services:
  db:
    image: postgres:9.5.14
  web:
    image: python:3.6.6
    command: python3 manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

以上文件可确保您获得9.5.14版本的postgres和3.6.6版本的python。 无论您将其部署在哪里,这都是您得到的。 查看https://hub.docker.com//python 以获取python图像中所有可用的标记/版本,并查看https://hub.docker.com/ /postgres以找出可用于postgres的所有版本/标记。图片。

编辑: 要解决自定义图片的问题,您可以采用以下几种方法:

a。根据您的部署位置(数据中心与公共云提供商),您可以开始拥有docker image registry。这里有很多选项,例如this

b。如果您在awsgcpazure这样的流行云提供商中运行,则其中大多数都提供自己的注册表

c。或者,您可以使用docker hub设置private repositories

每个标签都支持标签,因此仍要使用标签以确保您自己的自定义映像像公共映像一样被部署。