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:
ミラーの構築と起動:
1.2発生する可能性のある問題-libraryが見つかりません
その後、別のマシンがjenkinsを配備したときに発見されたこの問題は、jenkinsコンテナ内でdockerコマンドを呼び出すのが間違っていたことです(前回はjenkinsにプラグインがいくつか入っていたので、これらのプラグインはすでにこれらのパッケージをインストールしています):
なぜならjenkins容器の内部にこのバッグがないため、解決策は2つあります.
1.コンテナホストのパケットをコンテナにマッピングする:
2、jenkinsミラーをカプセル化し、公式のjenkinsミラーはdebian jessieに基づいており、dockerfileはソースを国内に切り替えたほうがよい.Dockerfileの内容は次のとおりです.
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