使用Docker在Jenkins中创建容器 + 在其中运行Docker (Docker in Docker)
docker-compose.yml配置文件
version: '2'
services:
jenkins:
image: 'jenkins:2.60.3'
container_name: jenkins
user: root
restart: always
ports:
- '8080:8080'
- '50000:50000'
volumes:
- ./data/jenkins:/var/jenkins_home
- /var/run/docker.sock:/var/run/docker.sock
ポイント:
1. volumeでdocker.sockをhost(どっかーを動かすマシン)と共有することで、立ち上げたDockerの中でもDockerを使えるようになる。(が、Dockerの中からでも、立ち上げたContainerを削除できてしまうので、注意が必要)
2. /var/jenkins_homeはdockerイメージが読む場所なので、変えてはいけない。Host側の/data/jenkinsは好きな場所にしてよい。こうすることで、Docker自体が死んでも、Dataは残っているので、もう一回立ち直せば、同じ状態に復元できる。
使用Docker启动Jenkins
docker-compose -f jenkins-docker-compose.yml up
现在,如果是在本地环境下,可以通过访问http://0.0.0.0:8080来连接Jenkins。
在Jenkins中使用Docker
jenkins のbuild shellの中で以下を書くと
docker --version
docker run --rm hello-world
我能明白HelloWorld已经被正确执行。
+ docker run --rm hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
9db2ca6ccae0: Pulling fs layer
9db2ca6ccae0: Verifying Checksum
9db2ca6ccae0: Download complete
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
如果在Docker上搭建Jenkins时,在Jenkins内无法共享卷的处理方法 – 更新于以后(2018/08/28)。
无法在Jenkins上创建的Docker容器中直接挂载在Docker中设置的Volume。
hostの./data/jenkins -> jenkins containerの /var/jenkins_homeにマウントしているが、
Jenkins内のプロジェクトをdocker-composeで管理している時に、そこから別のプロジェクトのDirをマウントしたいときが出てくる(かも)
那个时候,
-
- jenkins上でrepoを持ってくる
- 持ってきたrepoを新しいcontainerにMountする
をやろうとすると、そもそも1のJenkinsのworkspaceはホストにmountされた部分なので(なのでなのかわからないが)、あるコンテナ内のdirを別のコンテナにマウントすることになり、これはできない模様。(同じマウントオプションにするには、volumes_fromというオプションがある)
因此,由于无法避免,jenkins在挂载的主机上具有实际路径,通过将其写入新创建的容器的docker-compose.yml来解决该问题。
hostの./data/jenkinsの絶対パス。今回は、/home/ubuntu/docker-compose/data/jenkinsは、自分で変更する必要がある!/home/ubuntu/docker-compose/の下で、jenkinsのdocker-compose.ymlを動かしたとして。
services:
my_container:
...
volumes:
- "/home/ubuntu/docker-compose/data/jenkins/workspace/<別のjenkins jobのrepo>:/another_repo"
- "/home/ubuntu/docker-compose/data/jenkins/workspace/my_repo/<repo内で引っ張ってきたrepo>:/cloned_repo"
...
请参阅
-
- 以下是用中文进行重述的选项:
https://stackoverflow.com/questions/49312100/docker-in-docker-volumes-not-working-full-of-files-in-1st-level-container-em
Creating containerized build environments with the Jenkins Pipeline plugin and Docker. Well, almost.
https://github.com/jenkinsci/mesos-plugin/issues/159