Docker客户端(容器内)可以使用UNIX套接字与EC2上的Docker守护进程进行通信吗?

时间:2019-11-01 00:12:31

标签: docker jenkins amazon-ec2 docker-compose

作为Jenkins码头工人形象的一部分,

应该安装docker client(仅)

可以与安装在基础EC2实例上的docker守护进程进行通讯。

UNIX套接字,我的意思是socket(AF_UNIX,,)


背景

根据说明,给定here

我认为没有必要使用ink jenkins映像安装docker daemon,

因为作者正在使用UNIX套接字与EC2实例中运行的基础docker守护进程进行对话,如图here所示。

我的理解是,仅在jenkins映像中安装docker客户端安装程序,就可以使用UNIX套接字(/var/run/docker.sock)与EC2实例上运行的docker守护进程进行对话


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

2 个答案:

答案 0 :(得分:1)

要在Jenkins中使用Docker,Jenkins必须有权访问docker.sock

您在这里建议的是通过在jenkins容器内安装docker的docker方法中的docker,但实际上这不是必需的。您只需要一个有效的docker守护程序,因此,通常的方法是将/var/run/docker.sock从主机映射到容器。

看看这篇精彩的帖子https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

答案 1 :(得分:0)

您需要在docker映像中安装jenkins,然后将/var/run/docker.sock绑定安装,以便按照Jérôme Petazzoni's blog post on the subject中的说明运行侧面汽车集装箱。这是我的jenkins Dockerfile

FROM jenkins/jenkins:lts

USER root
RUN apt-get update && \
    apt-get install -y \
        maven \
        apt-transport-https \
        ca-certificates \
        curl \
        gnupg-agent \
        lsb-release \
        software-properties-common

RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

RUN add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/debian \
    $(lsb_release -cs) \
    stable"

RUN apt-get update && \
    apt-get install -y \
        docker-ce \
        docker-ce-cli \
        containerd.io

RUN usermod -a -G docker jenkins

COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/install-plugins.sh < /usr/share/jenkins/plugins.txt

USER jenkins
WORKDIR /var/jenkins_home

注意:您可以按照here的说明,使用plugins.sh安装插件。

构建jenkins图像,即:docker build --rm -t so:58652650 .

运行容器安装/var/run/docker.sock,即:docker run --rm -it -v /var/run/docker.sock:/var/run/docker.sock --entrypoint bash so:58652650

jenkins用户身份在图像内部,docker命令应可正常运行: docker in jenkins docker container