2014-07-21 110 views
2

将Docker容器部署到生产环境的最佳方式是什么?使用git的Docker部署工作流程

  • 添加Dockerfile到Git仓库和生产系统上运行docker build
  • 提交更改到一个容器docker commit并将其推到一个私人码头工人库,然后用docker pull拉它到生产系统。

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

我希望我的问题很清楚。

回答

1

理想情况下,您将拥有某种注册表服务器,并且您的Docker容器将在那里,您的生产环境会将这些容器拉入并使用它们。当您的应用程序代码发生变化时,您不必更新Docker容器,在Dockerfile中添加/项目并将其与--volumes-from共享给其他容器。你的应用程序应该完全独立于容器。

现在有像无花果这样的工具可以让你用docker容器启动开发环境。然后,您将进一步采取这种行动,并将您的应用程序容器部署在CoreOS群集中。

以下是我的productAPI,这只是将项目代码添加到容器中。

除非系统依赖关系为项目更改,否则不应该更改Dockerfile。

Dockerfile

FROM phusion/baseimage 
MAINTAINER Alex Goretoy <[email protected]> 

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/* 
2

我要说的是,在生产环境中,你只是想拉和运行容器(S)的最后一个图像(S)。

因此,有一个私人注册的想法是好的,你的输水管道将是:

  1. 提交更新,应用或Dockerfile(S)
  2. CI发生变化,编译你的应用程序,建立新图像并将其推送到注册表
  3. 在生产上拉出新图像
  4. 运行它!

在我身边,我没有使用docker commit,我更喜欢docker build ... -t ...的标签。当我使用交互式shell调试容器时,我只使用commit