【发布时间】:2019-11-01 00:12:31
【问题描述】:
作为 Jenkins docker 镜像的一部分,
我应该安装 docker 客户端(仅),
可以与安装在底层 EC2 实例上的 docker 守护进程通信。
UNIX 套接字,我的意思是 socket(AF_UNIX,,)
背景
按照说明,给定here,
我认为没有必要在 jenkins 映像中安装 docker daemon,
因为作者正在使用 UNIX 套接字与运行在 EC2 实例中的底层 docker daemon 进行通信,如 here 所示。
我的理解是,在 jenkins 映像中安装 docker 客户端安装(仅)就足以与运行在 EC2 实例上的 docker 守护进程对话,使用 UNIX 套接字(/var/run/docker.sock)
1)
在 jenkins 镜像中运行的 docker 客户端可以与在底层 EC2 实例中运行的 docker 守护进程通信吗?有下面的映射...
volumes:
- /var/run/docker.sock:/var/run/docker.sock
2)
如何仅在下面的 jenkins 镜像中安装 docker 客户端?
FROM jenkins:1.642.1
# Suppress apt installation warnings
ENV DEBIAN_FRONTEND=noninteractive
# Official Jenkins image does not include sudo, change to root user
USER root
# Used to set the docker group ID
# Set to 497 by default, which is the groupID used by AWS Linux ECS instance
ARG DOCKER_GID=497
# Create Docker Group with GID
# Set default value of 497 if DOCKER_GID set to blank string by Docker compose
RUN groupadd -g ${DOCKER_GID:-497} docker
【问题讨论】:
-
Jenkins 文档有instructions for making use of Docker。您显示的绑定挂载是正确的,但在 Dockerfile 中硬编码主机组 ID 不正确。
docker二进制文件同时包含客户端和守护进程;与主机 Docker 交互并不是绝对必要的,但至少任何sh 'docker ...'命令都需要它,我建议只安装它。 -
@DavidMaze 在此语法中:
-v /var/run/docker.sock:/var/run/docker.sock第一个套接字文件属于 ec2,第二个套接字文件属于容器(挂载点)...对于此卷绑定...确实安装了docker-ce-cli在詹金斯图像中还不够吗? -
您明确需要
-v挂载。 (请记住,访问该套接字可以让您轻松接管主机;默认情况下它不可用。)仅安装软件包就相当于安装mysql-client但在任何地方都没有正在运行的数据库;该程序将启动但无法连接到任何东西。 -
@DavidMaze docker daemon 已经在 ec2 主机上运行...我的理解是,该绑定语法中的第一个套接字文件属于运行在 ec2 主机上的 docker daemon...不是吗?跨度>
标签: docker jenkins amazon-ec2 docker-compose