Может ли клиент Docker (внутри контейнера) общаться с демоном docker в EC2 через сокет UNIX? - PullRequest
1 голос
/ 01 ноября 2019

Как часть образа докера Jenkins,

должен установить клиент докера (только),

, который может общаться с демоном докера, установленным в базовом экземпляре EC2.

Сокет UNIX, я имею в виду socket(AF_UNIX,,)


Фон

Согласно инструкции, приведенной здесь ,

Я не вижу необходимостидля установки демона docker с образом jink для jink,

, поскольку автор использует сокет UNIX для связи с нижележащим демоном docker, работающим в экземпляре EC2, как показано здесь .

Насколько я понимаю, установки установки клиента докера (только) в образе jenkins было бы достаточно для общения с демоном докера, работающим на экземпляре EC2, с использованием сокета UNIX (/var/run/docker.sock)


1)

Может ли клиент Docker, работающий в образе jenkins, взаимодействовать с демоном Docker, работающим в базовом экземпляре EC2? с отображением ниже ...

volumes:
    - /var/run/docker.sock:/var/run/docker.sock

2)

Как установить клиент Docker только в образе ниже jenkins?

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 ]

1 голос
/ 01 ноября 2019

Чтобы использовать Docker в Jenkins, Jenkins должен иметь доступ к docker.sock.

. То, что вы предлагаете здесь, это подход docker in docker, путем установки docker внутри контейнера jenkins, но на самом деле это не так. необходимо. Вам нужен только действительный демон docker, и по этой причине обычный подход состоит в отображении /var/run/docker.sock от хоста к контейнеру.

Посмотрите на этот удивительный пост https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/

0 голосов
/ 01 ноября 2019

Вам необходимо установить docker внутри jenkins образа, а затем привязать монтирование /var/run/docker.sock, чтобы вы могли запускать боковые автомобильные контейнеры, как объяснено в посте Джерома Петаццони на тему . Это мои 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

Примечание : вы можете устанавливать свои плагины во время сборки, используя 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

Внутри изображения как пользователь jenkinsdocker команды должны работать должным образом: docker in jenkins docker container

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...