도커 내부의 도커

때때로 우리는 Docker 안에 Docker를 원합니다. 예: CI 파이프라인, CI/CD 파이프라인용 Jenkins Docker 기반 동적 에이전트, 샌드박스 환경 또는 실험용 워크스테이션.

다음은 세 가지 방법입니다. (1) 및 (2)는 docker 데몬에 대한 더 많은 권한이 있으므로 보안이 필요합니다. docker에서 방화벽을 사용하거나 rootless로 만들 수 있습니다.

다음 문서가 도움이 될 수 있습니다.









그리고




세 가지 방법에서는 sysbox를 사용합니다.

방법 1: [/var/run/docker.sock]을 사용하는 Docker의 Docker



Docker 데몬이 실행 중인 동일한 호스트에 있는 경우/var/run/docker.sock을 사용하여 컨테이너를 관리할 수 있습니다.

docker 내부에서 docker를 실행하려면 기본 Unix 소켓 docker.sock을 볼륨으로 사용하여 docker를 실행하기만 하면 됩니다.

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           -ti docker

이제 컨테이너 내에서 이미지를 빌드하고 레지스트리에 푸시하기 위한 docker 명령을 실행할 수 있어야 합니다.

docker.sock을 볼륨으로 마운트하는 대화형 모드에서 Docker 컨테이너를 시작합니다. 공식 도커 이미지를 사용하겠습니다.

docker run -v /var/run/docker.sock:/var/run/docker.sock -ti docker

#Inside Container

docker pull ubuntu

#When you list the docker images, you should see the ubuntu image along with other docker images in your host VM

docker images

# Now create a Dockerfile inside test directory
and RUN DOCKER FILE
docker build -t test-image .

방법 2: dind를 사용하는 Docker의 Docker



참고: 이렇게 하려면 컨테이너를 권한 있는 모드로 실행해야 합니다.

docker run --privileged -d --name dind-test docker:dind
docker exec -it dind-test /bin/sh
docker pull ubuntu
docker images
mkdir test && cd test
vi Dockerfile
#Create Docker file and then run
docker build -t test-image

방법 3: Sysbox 런타임을 사용하는 Docker의 Docker



방법 1과 2는 기본 컨테이너를 권한 모드로 실행하기 때문에 보안 측면에서 몇 가지 단점이 있습니다. Nestybox는 sysbox Docker 런타임을 통해 이 문제를 해결하려고 합니다. 그러나 방화벽을 구현하면 보안 계층을 얻을 수 있습니다. 위의 내 기사를 확인하십시오.

(1) 시스박스 CE 받기
오픈 소스 Sysbox를 기반으로 하는 커뮤니티 에디션.


네스티박스 / 시스박스


루트가 없는 컨테이너가 VM처럼 Systemd, Docker, Kubernetes와 같은 워크로드를 실행할 수 있도록 지원하는 오픈 소스 차세대 "runc"입니다.












소개


Sysbox는 원래 개발된 오픈 소스 컨테이너 런타임(일명 runc)입니다.
by Nestybox , 컨테이너를 두 가지로 향상
주요 방법:

  • 컨테이너 격리 개선: Sysbox는 항상 Linux를 활성화합니다.
    컨테이너의 사용자 네임스페이스(즉, 컨테이너의 루트 사용자는
    호스트에 대한 권한), 컨테이너 내부의 호스트 정보를 숨기고
    컨테이너의 초기 마운트 등.

  • 컨테이너가 VM으로 작동하도록 지원: Sysbox를 사용하면 컨테이너가 가능해집니다.
    다음을 포함하여 물리적 호스트 또는 VM에서 실행되는 대부분의 워크로드 실행
    systemd, Docker, Kubernetes 등을 원활하고 적절하게 격리
    (특권 컨테이너 없음, 복잡한 이미지 없음, 까다로운 진입점 없음, 없음
    특수 볼륨 마운트 등)

  • Sysbox는 OCI 기반 "runc"입니다. 즉, 일반적으로 Docker를 사용하고
    이러한 향상된 컨테이너를 배포하기 위한 Kubernetes(실제로 Sysbox는
    덮개, 직접 상호 작용하지 않음). 따라서 새로운 것을 배울 필요가 없습니다.
    도구를 사용하거나 기존 컨테이너를 수정하십시오…

    View on GitHub


    기사 작성 당시supported distros는 다음과 같습니다.
    Ubuntu Bionic(18.04),Ubuntu Focal(20.04),Debian Buster(10),Debian Bullseye(11),Fedora 31,Fedora 32,CentOS 8

    설치 중:

    git clone --recursive [email protected]:nestybox/sysbox.git
    make sysbox
    sudo make install
    #Once Sysbox is installed, you start it with:
    sudo ./scr/sysbox
    #Configuring Docker
    sudo ./scr/docker-cfg --sysbox-runtime=enable
    
    


    (2)시스템박스 사용

    docker run --runtime=sysbox-runc --name sysbox-dind -d docker:dind
    docker exec -it sysbox-dind /bin/sh
    


    축하합니다 :)



    여기는 nice article

    더 나아가 :
    나는 이 회의의 참석자 중 한 명이었습니다. sysboxhttps://bluejeans.com/s/Qq_IsjrnOaG에 대해 말하는 공동 창립자를 찾을 수 있습니다. 20.05분

    내 팀에 가입하려면 여기를 클릭하십시오.

    좋은 웹페이지 즐겨찾기