使用git的Docker部署工作流
将docker容器部署到生产环境的最佳方式是什么使用git的Docker部署工作流,git,deployment,docker,Git,Deployment,Docker,将docker容器部署到生产环境的最佳方式是什么 将Dockerfile添加到git存储库,并在生产系统上运行docker build 使用docker Commit将更改提交到容器,并将其推送到专用docker存储库,然后使用docker pull将其拉到生产系统 我是否应该运行docker commit,即使我不更改基础结构,只更改应用程序代码 我希望我的问题是清楚的。理想情况下,您将拥有某种注册表服务器,您的docker容器将在那里,您的生产环境将引入并使用它们。当应用程序代码更改时,
- 将
添加到git存储库,并在生产系统上运行Dockerfile
docker build
- 使用
将更改提交到容器,并将其推送到专用docker存储库,然后使用docker Commit
将其拉到生产系统docker pull
docker commit
,即使我不更改基础结构,只更改应用程序代码
我希望我的问题是清楚的。理想情况下,您将拥有某种注册表服务器,您的docker容器将在那里,您的生产环境将引入并使用它们。当应用程序代码更改时,您不必更新docker容器,在docker文件中添加/project并与
--卷从
共享到其他容器。你的应用程序应该完全独立于容器
现在有一些工具,比如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
我想说的是,在生产环境中,您只需要提取并运行容器的最后一个映像 因此,拥有私有注册中心的想法很好,您的交付管道将是:
在我这方面,我不使用
docker commit
,我更喜欢带有docker build的标签-t…
。当我调试带有交互式shell的容器时,我只使用commit
。当您将其推送到docker repo时,您是否还包括敏感信息,如api密钥、密码等,或者您有不同的方法处理敏感信息?我知道这是一种私人回购,但我不认为将这些数据推送到回购是一种好的做法。我还在学Docker atm。
#!/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/*