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道将是:
- 将更改提交到您的应用程序或您的Dockerfile(s)
- CI进行更改,编译您的应用程序,构build新图像并将其推送到registry
- 在生产上拉出新的图像
- 运行 !
在我这边,我不使用docker commit
,我喜欢docker build ... -t ...
标签docker build ... -t ...
我只使用commit
时,我debugging一个交互式shell的容器。