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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,415评论 0 27
  • 说到CI(持续集成)也许你脑子里马上会蹦出一个著名的CI工具,就是我们本篇实践记录中的jenkins。 没错,je...
    wendell_dev阅读 7,611评论 0 31
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,822评论 0 7
  • 摘要:继续docker的学习之旅,今天练习一些常用的命令: 一、镜像相关 1.1 列出本机所有镜像 docker ...
    暖夏未眠丶阅读 778评论 0 0
  • 一,说清楚一个重要概念 二,我说的是什么概念 三,这个概念为什么重要 四,这个概念普通被如何识解 五,这个概念实际...
    池恩琛阅读 565评论 0 1