使用git的Docker部署工作流程

时间:2014-07-21 00:03:00

标签: git deployment docker

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

  • Dockerfile添加到git存储库并在生产系统上运行docker build
  • 使用docker commit提交对容器的更改并将其推送到私有Docker存储库,然后将其与docker pull一起提取到生产系统。

即使我不更改基础架构而只更改应用程序代码,我应该运行docker commit吗?

我希望我的问题很明确。

2 个答案:

答案 0 :(得分:2)

我想说在生产环境中你只想拉动并运行容器的最后一个图像。

因此,拥有私人注册表的想法很好,您的投放渠道将是:

  1. 提交对您的应用或Dockerfile的更改
  2. CI进行更改,编译您的应用,构建新图像,并将其推送到注册表
  3. 在制作中提取新图像
  4. 跑吧!
  5. 在我这边,我不使用docker commit,我更喜欢使用docker build ... -t ...的标签。我在使用交互式shell调试容器时只使用commit

答案 1 :(得分:1)

理想情况下,你会有某种注册服务器,你的docker容器就在那里,你的生产环境会把它们拉进来并使用它们。当应用程序代码更改时,您不必更新docker容器,在Dockerfile中添加ADD / project并将其与--volumes-from共享给其他容器。你的app应该完全独立于容器。

现在有像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

setup.sh

#!/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/*
相关问题