Jenkins(Dockerコンテナ内)ホストのdockerコマンドを使用

4551 ワード

1、Jenkinsミラー
    Dockerコンテナ内のJenkinsはコンテナ外泊ホストのDocker(DooD、また別の場合DioD)を使用していますが、googleではいくつかの説がありますが、成功していません(試したことがありますが、ホスト/etc/default/dockerのDOCKER_OPTS構成を変更し、常にアクセス拒否の問題が発生しますが、実はコンテナのjenkinsユーザーはコンテナ外のdockerコマンドにアクセスする権限がありません),オオカミの考え方に従って,コンテナ内のjenkinsユーザをdockerグループに加えるとdockerコマンドへのアクセスに成功する.
1.1カスタムjenkinsミラーの作成
ミラーDockerfile:
FROM jenkins

USER root
ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

USER jenkins

ミラーの構築と起動:
$ docker build . -t my-jenkins
$ docker run --name jenkins -p 7080:8080 -p 50000:50000 -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -v /var/docker_data/jenkins/jenkins_home:/var/jenkins_home -v /var/docker_data/jenkins/settings:/var/settings -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker -d my-jenkins
     volume  ( jenkins    docker        ):
-v /var/run/docker.sock:/var/run/docker.sock
-v $(which docker):/usr/bin/docker

jenkins project docker , maven docker 。


1.2発生する可能性のある問題-libraryが見つかりません
    その後、別のマシンがjenkinsを配備したときに発見されたこの問題は、jenkinsコンテナ内でdockerコマンドを呼び出すのが間違っていたことです(前回はjenkinsにプラグインがいくつか入っていたので、これらのプラグインはすでにこれらのパッケージをインストールしています):
docker: error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory
Build step 'Execute shell' marked build as failure

    なぜならjenkins容器の内部にこのバッグがないため、解決策は2つあります.
      1.コンテナホストのパケットをコンテナにマッピングする: 
#     docker    ,          volume
$ docker run --name jenkins -v /usr/lib/x86_64-linux-gnu/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7 -d my-jenkins

2、jenkinsミラーをカプセル化し、公式のjenkinsミラーはdebian jessieに基づいており、dockerfileはソースを国内に切り替えたほうがよい.Dockerfileの内容は次のとおりです.
FROM jenkins

USER root
#           ,       jessie 
RUN echo '' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.aliyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#          
RUN apt-get update && apt-get install -y libltdl7

ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group \
USER jenkins