将docker容器部署到生产环境的最佳方法是什么?
Dockerfile
添加到git存储库并在生产系统上运行docker build
docker commit
提交对容器的更改并将其推送到私有Docker存储库,然后将其与docker pull
一起提取到生产系统。即使我不更改基础架构而只更改应用程序代码,我应该运行docker commit
吗?
我希望我的问题很明确。
答案 0 :(得分:2)
我想说在生产环境中你只想拉动并运行容器的最后一个图像。
因此,拥有私人注册表的想法很好,您的投放渠道将是:
在我这边,我不使用docker commit
,我更喜欢使用docker build ... -t ...
的标签。我在使用交互式shell调试容器时只使用commit
。
答案 1 :(得分:1)
理想情况下,你会有某种注册服务器,你的docker容器就在那里,你的生产环境会把它们拉进来并使用它们。当应用程序代码更改时,您不必更新docker容器,在Dockerfile中添加ADD / project并将其与--volumes-from
共享给其他容器。你的app应该完全独立于容器。
现在有像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
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/*