在开发调试过程中,需要不断更新代码到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


Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐