使用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をマウントしたいときが出てくる(かも)

那个时候,

    1. 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"

...

请参阅

    1. 以下是用中文进行重述的选项:

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

广告
将在 10 秒后关闭
bannerAds