使用git的Docker部署工作流

使用git的Docker部署工作流,git,deployment,docker,Git,Deployment,Docker,将docker容器部署到生产环境的最佳方式是什么 将Dockerfile添加到git存储库,并在生产系统上运行docker build 使用docker Commit将更改提交到容器,并将其推送到专用docker存储库,然后使用docker pull将其拉到生产系统 我是否应该运行docker commit,即使我不更改基础结构,只更改应用程序代码 我希望我的问题是清楚的。理想情况下,您将拥有某种注册表服务器,您的docker容器将在那里,您的生产环境将引入并使用它们。当应用程序代码更改时,

将docker容器部署到生产环境的最佳方式是什么

  • Dockerfile
    添加到git存储库,并在生产系统上运行
    docker build
  • 使用
    docker Commit
    将更改提交到容器,并将其推送到专用docker存储库,然后使用
    docker pull
    将其拉到生产系统
我是否应该运行
docker commit
,即使我不更改基础结构,只更改应用程序代码


我希望我的问题是清楚的。

理想情况下,您将拥有某种注册表服务器,您的docker容器将在那里,您的生产环境将引入并使用它们。当应用程序代码更改时,您不必更新docker容器,在docker文件中添加/project并与
--卷从
共享到其他容器。你的应用程序应该完全独立于容器

现在有一些工具,比如fig,可以让您使用docker容器启动开发环境。然后,您可以更进一步,在CoreOS集群中部署应用程序容器

这是我的productAPI的内容,它只是将项目代码添加到容器中

除非项目的系统依赖项发生变化,否则您不必对Dockerfile进行太多的更改

Dockerfile

FROM phusion/baseimage
MAINTAINER Alex Goretoy <alex@goretoy.com>

ENV DEBIAN_FRONTEND noninteractive

ENV PRODUCT_API_PATH /opt/product_api

RUN mkdir -p $PRODUCT_API_PATH/

ADD . $PRODUCT_API_PATH/

RUN $PRODUCT_API_PATH/setup.sh

EXPOSE 8080

CMD python $PRODUCT_API_PATH/manage.py runserver

我想说的是,在生产环境中,您只需要提取并运行容器的最后一个映像

因此,拥有私有注册中心的想法很好,您的交付管道将是:

  • 提交对应用程序或Dockerfile的更改
  • CI进行更改、编译应用程序、生成新图像并将其推送到注册表
  • 在产品上拉取新图像
  • 快跑
    在我这方面,我不使用
    docker commit
    ,我更喜欢带有
    docker build的标签-t…
    。当我调试带有交互式shell的容器时,我只使用
    commit

    当您将其推送到docker repo时,您是否还包括敏感信息,如api密钥、密码等,或者您有不同的方法处理敏感信息?我知道这是一种私人回购,但我不认为将这些数据推送到回购是一种好的做法。我还在学Docker atm。
    #!/bin/bash
    
    apt-get update
    
    apt-get install -y git \
        wget \
        openssl \
        libssl-dev \
        libffi-dev \
        python-pip \
        python2.7-dev \
        postgresql-9.3 \
        libpq-dev
    
    apt-get update
    
    apt-get install -y libcurl4-openssl-dev
    
    apt-get update
    
    wget https://bootstrap.pypa.io/ez_setup.py -O - | python
    
    pip install -r $PRODUCT_API_PATH/requirements.txt
    
    # Clean up APT when done.
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*