Docker部署工作stream与git

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

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

我应该运行docker commit即使我不改变基础设施,但只是应用程序代码?

我希望我的问题很清楚。

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

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

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

除非项目的系统依赖关系发生变化,否则不必更改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/* 

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

所以有一个私人registry的想法是好的,你的交付pipe道将是:

  1. 将更改提交到您的应用程序或您的Dockerfile(s)
  2. CI进行更改,编译您的应用程序,构build新图像并将其推送到registry
  3. 在生产上拉出新的图像
  4. 运行 !

在我这边,我不使用docker commit ,我喜欢docker build ... -t ...标签docker build ... -t ... 我只使用commit时,我debugging一个交互式shell的容器。