2014-07-21 111 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