开发过程中持续使用Git代码更新Docker容器的方法

二次信任 提交于 2019-11-26 02:58:23

在开发调试过程中,需要不断更新代码到Git库,然后使用Git库中的最新代码更新运行着的Docker容器,目前看来有如下两种方法,建议使用第二种。

1. 直接在容器中执行git命令,更新容器中的目录和文件(不推荐)

1) 首先,在构建容器镜像文件的时候,定义在Dockfile文件中并设置代码的Git库

RUN apt-get install -y git

RUN git config --global user.name "Xiangbin Han"
RUN git config --global user.email "youremail@mydomain.com"

RUN mkdir /home/myname/.ssh/
RUN chmod 700 /home/myname/.ssh/
ADD id_rsa /home/myname/.ssh/
RUN chmod 600 /home/myname/.ssh/id_rsa

RUN echo 'StrictHostKeyChecking no\nUserKnownHostsFile /dev/null' > /home/myname/.ssh/config
RUN chmod 644 /home/myname/.ssh/config

RUN su -myname -c \
  "git clone ssh://myname@gerrit.server.com:29418/myparent/myproject /home/myname/myproject \
  ; cd /home/myname/myproject \
  ; git fetch ssh://myname@gerrit.server.com:29418/myparent/myproject ${refs} \
  ; git checkout FETCH_HEAD"

RUN chown -R myname:mygroup /home/myname

2) 其次,基于构建的容器镜像文件启动容器
docker run -it --name container_name image_name:version

3) 需要更新运行中的容器的目录或文件时,执行如下Docker命令docker exec

docker exec container_name bash -c "cd /home/myname/myproject;git fetch ssh://myname@gerrit.server.com:29418/myparent/myproject ${GERRIT_REFSPEC};git checkout FETCH_HEAD"


说明,这种方法的弊端是必须能够在容器内部执行Git命令,因而不得不将私钥加入到容器,导致安全风险。


2. 直接对容器实例执行docker cp命令,更新容器中的目录和文件(推荐)

docker cp ~/myproject/. container_name:/home/myname/myproject

3. 启动容器实例的时候,为容器加载Volume(推荐)

docker run -v /mnt/temp/myproject/:/home/myname/myproject ...

补充说明:

在生产环境中,由于代码比较稳定,可以在构建镜像的时候就代码直接加入到镜像中。

即在Dockfile中设置如下:

RUN COPY . /home/myname/myproject


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!