[筆記] Jenkins with DooD (Docker-outside-of-Docker)

R. H.
hobo engineer
Published in
3 min readJan 21, 2019

將 Jenkins 於 Container 容器中執行時 , 若需於 Jenkins 上使用到 Docker 來進行其他自動化的 CI/CD , 有兩種方式可以呼叫/執行 Docker 命令 .

1.DooD (Docker-outside-of-Docker)

在 Jenkins container 中能呼叫外部(host)的 docker 命令 .

2. DinD ( Docker-in-Docker)

在Jenkins Container 中安裝一個完整的隔離的Docker。

而這篇主要紀錄 DooD 的部分

首先建立主要的 Dockerfile

FROM jenkinsUSER root
RUN apt-get update \
&& apt-get install -y sudo \
&& apt-get install -y libltdl7 \
&& rm -rf /var/lib/apt/lists/*
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoersUSER jenkins

說明1:
由於之後在 Jenkins Container 內呼叫 Docker 命令因為需要使用 sudo ,而 jenkins image 內預設是沒有sudo 使用者許可權的,所以一開始須特別 install進去。

說明2:
libltdl7 則是 debian 上的套件 (Jenkins 預設基底為 debian),需特別另外裝,不然執行時會報錯 (原因未知)。

說明3:
把 Container 内的 "jenkins" 用户加入到 sudoer 中。

接著 build image

docker build -t="dood" .

再來在 run 時,需特別將 Jenkins Container 內的 docker 命令 指給 host 上的 docker.

docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker dood /bin/bash

如此便可成功於 Jenkins Container 內呼叫 host docker

--

--