如何将代码从Git更新到Docker容器

Che*_*lix 29 python git deployment continuous-integration docker

我有一个Docker文件试图将Django代码部署到容器中

FROM ubuntu:latest
MAINTAINER { myname }

#RUN echo "deb http://archive.ubuntu.com/ubuntu/ $(lsb_release -sc) main universe" >> /etc/apt/sou$

RUN apt-get update

RUN DEBIAN_FRONTEND=noninteractive apt-get install -y tar git curl dialog wget net-tools nano buil$
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y python python-dev python-distribute python-p$

RUN mkdir /opt/app
WORKDIR /opt/app

#Pull Code
RUN git clone git@bitbucket.org/{user}/{repo}

RUN pip install -r website/requirements.txt

#EXPOSE = ["8000"]
CMD python website/manage.py runserver 0.0.0.0:8000
Run Code Online (Sandbox Code Playgroud)

然后我构建我的代码docker build -t dockerhubaccount/demo:v1 .,这将我的代码从Bitbucket拉到容器.我运行它docker run -p 8000:8080 -td felixcheruiyot/demo:v1,事情似乎工作正常.

现在我想更新代码,即自从我使用以来git clone ...,我有这样的困惑:

  • 当我有新的提交时,如何更新我的代码,在Docker容器构建时,它会附带新代码(注意:当我运行构建时,由于缓存而无法获取它).
  • 这种方法的最佳工作流程是什么?

sea*_*mcl 21

您可以使用几种方法.

  1. 您可以使用docker build --no-cache以避免使用Git克隆的缓存.
  2. 启动命令调用git pull.因此python manage.py,CMD cd /repo && git pull && python manage.py如果事情更复杂,那么您可能会使用启动脚本而不是运行.

我倾向于选择2.你也可以运行一个cron作业来更新你容器中的代码,但这样做的工作要多一些,并且有点违背了Docker的理念.

  • 我会拿2回答.我认为这更有意义,因为运行--no-cache会将所有内容安装一个新的,而不是一个好的方法.谢谢你的贡献. (2认同)

Adr*_*uat 10

我建议您检查主机上的代码并将COPY其签入图像.这样,无论何时进行更改,它都会更新.此外,在开发期间,您可以将源目录绑定到容器中的代码目录,这意味着任何更改都会立即反映在容器中.

检查上次更新的git存储库的docker命令虽然非常有用!


tak*_*mag 6

另一种方法.

只要指令字符串与缓存图像完全相同,Docker构建命令就会使用缓存.所以,如果你写

RUN echo '2014122400' >/dev/null && git pull ...
Run Code Online (Sandbox Code Playgroud)

在下次更新时,您将更改如下.

RUN echo '2014122501' >/dev/null && git pull ...
Run Code Online (Sandbox Code Playgroud)

这可以防止docker使用缓存.