Jenkins容器中安装Docker

背景:

Docker官方是不建议在容器内运行Docker daemon的,但是呢,当我们用Jenkins时,却又免不了要用到Docker。这个时候,如果我们的Jenkins是安装在Docker容器中,就会导致无法调用Docker。

过程:

在安装Jenkins容器时,把host的docker socket挂载到容器里,直接利用host的docker daemon在容器里跑。同时在容器里安装docker client。

挂载命令(其他命令根据自己需要调整):

docker run -p 8080:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  --name jenkins \
  jenkins/jenkins

登录Jenkins容器:

docker exec -it -u root jenkins bash

安装docker client(docker是ubuntu内核,可以直接用ubuntu上一些命令):

apt-get update && \
apt-get -y install apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
   $(lsb_release -cs) \
   stable" && \
apt-get update && \
apt-get -y install docker-ce

注意事项:

特别需要强调的是,因为docker内部有些功能需要用到root权限(namespace and cgroups),这样挂载后,容器内的命令将能够影响到host,会导致安全风险。具体问题就需要具体分析了。

参考文档:

The simple way to run Docker-in-Docker for CI
Docker not found when building docker image using Docker Jenkins container pipeline
Is it possible to install only the docker cli and not the daemon
Can anyone explain docker.sock

你可能感兴趣的:(Jenkins容器中安装Docker)