使用git进行Docker部署工作流程

8
什么是将Docker容器部署到生产环境的最佳方式?
  • 向git存储库添加Dockerfile,并在生产系统上运行docker build
  • 使用docker commit提交包含更改的容器到私有Docker存储库,然后使用docker pull在生产系统上拉取它。
即使我只更改应用程序代码而不是基础设施,我是否应该运行docker commit
希望我的问题很清楚。
2个回答

4
我认为在生产环境中,您只需要拉取和运行容器的最新镜像。因此,拥有私有仓库的想法是很好的,您的交付流程应该是:
1. 提交应用程序或Dockerfile的更改 2. CI获取更改,编译您的应用程序,构建新的镜像,并将其推送到仓库 3. 在生产环境中拉取新的镜像 4. 运行它!
在我的工作中,我不使用docker commit,而是喜欢使用带有docker build ... -t ...的标签。我只在使用交互式shell调试容器时才使用commit。

1
当您将其推送到Docker仓库时,是否也包括敏感信息,例如API密钥、密码等,或者您有不同的处理敏感信息的方法?我知道这是一个私有仓库,但我认为将这些数据推送到仓库并不是一个好的做法。附言:我目前仍在学习Docker。 - Robin Carlo Catacutan
使用环境变量 - Arkadiusz G.

2
理想情况下,您应该拥有某种注册表服务器,您的Docker容器将在其中,您的生产环境会拉取这些容器并使用它们。当您的应用程序代码更改时,您不必更新Docker容器,只需在Dockerfile中添加 /project 并与其他容器共享 --volumes-from 即可。您的应用程序应该独立于容器。
现在有一些工具,如fig,可以让您使用Docker容器启动开发环境。然后,您可以将此进一步扩展,并在CoreOS集群中部署您的应用程序容器。
以下是我的productAPI所使用的内容,这只是将项目代码添加到容器中。
除非项目的系统依赖关系发生更改,否则您不应该太多地更改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/*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接