Docker 내부에서 Docker를 어떻게 실행합니까?

이 블로그에서, 나는 두 가지 다른 방법을 사용하여 docker에서 docker를 실행하는 데 필요한 절차를 설명할 것이다.

언제 필요하세요?


Jenkins와 같은 CI/CD 도구를 사용할 때 Docker 컨테이너에서 Docker를 실행하는 문제가 자주 발생합니다.

Jenkins에서는 지정된 에이전트에서 파이프의 각 단계에 대한 모든 명령이 실행됩니다.에이전트는 Docker 컨테이너일 수 있습니다.따라서 예를 들어 구축 단계에서 Docker 명령(예를 들어 이미지 구축에 사용)이 있으면 Docker 컨테이너에서 Docker 명령을 실행해야 합니다.
또한 Jenkins 자체는 Docker 컨테이너로 실행할 수 있습니다.Docker 에이전트를 사용하면 Jenkins Docker 컨테이너에서 Docker 컨테이너를 시작합니다.Jenkins 파이핑에도 Docker 명령이 있으면 3중첩된 Docker가 있습니다.
그러나 상술한 방법을 통해 모든 Docker는 같은 Docker 수호 프로그램을 사용하고 같은 시스템에서 여러 개의 수호 프로그램 (이 예에서 세 개) 의 모든 어려움은 무시된다.

Docker 컨테이너에서 Docker 실행


docker에서 docker를 실현하는 데는 두 가지 방법이 있다.
1) docker를 설치하여 docker를 실행합니다.sock(DooD 메서드)
2) 딘파

Docker의 Docker에서 [/var/run/Docker.sock] 사용


/ var /run /docker가 무엇입니까?양말


/var/run/docker.sock은 기본 Unix 소켓입니다.소켓은 같은 호스트의 프로세스 간의 통신에 사용됩니다.기본적으로 Docker 데몬은 Docker를 수신합니다.양말Docker 데몬을 실행하는 호스트에서/var/run/Docker를 사용할 수 있습니다.sock 관리 용기.
이것은 Docker 용기에서 Docker를 사용하는 추천 방법입니다. Docker 용기를 사용할 때 두 Docker 실례는 서로 독립된 것이 아니라 많은 저급 기술 문제를 벗어났습니다.
이러한 방법으로 Docker가 설치된 용기는 자신의 Docker 수호 프로그램을 실행하지 않고 호스트 시스템에 연결된 Docker 수호 프로그램을 실행합니다.즉, 컨테이너와 호스트 시스템에 Docker CLI가 있지만 모두 같은 Docker 데몬에 연결됩니다.언제든지, 호스트 시스템에서 실행되는 Docker 데몬만 컴퓨터에서 실행됩니다.
이를 위해 Docker가 설치된 Docker 컨테이너를 시작할 수 있습니다.
예를 들어 docker 이미지를 사용할 수 있습니다. 이것은 docker가 설치된 docker 이미지로 다음과 같이 시작합니다.
기본 Unix 소켓 docker를 사용하여 docker를 실행합니다.양말을 책으로 삼다.
docker run -ti -v /var/run/docker.sock:/var/run/docker.sock docker

기본 Unix 소켓 docker를 사용하여 docker를 실행합니다.양말을 책으로 삼다.
그런 다음 방금 시작한 Docker 컨테이너에서 다음과 같은 Docker 명령을 실행합니다.
docker pull ubuntu

마찬가지로 다음 명령을 실행한 후 이미지를 추출했습니다.
  docker images 

출력을 관찰하다.출력은 호스트 시스템에서 이 명령을 실행할 때와 완전히 같습니다.
방금 시작한 용기의 Docker 설치를 보십시오. 신선하고 건드리지 않았으면 좋겠습니다. 그림이 캐시되어 있고 용기가 실행 중입니다.호스트 시스템에서 이미 실행 중인 Docker 데몬과 대화하기 위해 컨테이너에 Docker CLI를 연결했기 때문입니다.
즉, 컨테이너에서 이미지를 추출할 경우 호스트 시스템에서도 이미지가 표시됩니다(또는 그 반대).컨테이너에서 컨테이너를 실행하는 경우 이 컨테이너는 실제로 호스트에서 실행 중인 모든 컨테이너(Docker 실행 컨테이너 포함)의 동급입니다.
다음 그림을 참조하십시오.

다음 그림에서 용기가 시작되었음을 볼 수 있습니다.

진정한 Docker in Docker(Docker in Docker dind 사용)


이 방법은 실제로 용기에 하위 용기를 만드는 것이다.만약 당신이 정말로 원한다면, 당신은 Docker에서 '진정한' Docker, 즉 끼워 넣은 Docker 실례를 사용할 수 있습니다. 서로 완전히 봉인되어 있습니다.다음과 같이 Docker 이미지의 dind(Docker in Docker) 태그를 사용하여 이 작업을 수행할 수 있습니다.
docker run --privileged -d --name dind-test docker:dind

현재 exec를 사용하여 용기에 로그인합니다.
docker exec -it dind-test /bin/sh

여기서, 나는 Ubuntu 그림을 한 장 당겼는데, 아래 그림에서 볼 수 있다

여기서, 나는 실행 중인 용기에서 또 용기를 가동했다.

여기서 Ubuntu별 명령을 실행할 수 있습니다.

여기서 Ubuntu 패키지 관리 시스템을 업데이트했습니다.

Docker에서 Docker를 실행하는 것이 안전합니까?


docker를 사용하여 docker에서 docker를 실행합니다.docker와 dind 방법은 안전하지 않습니다. 왜냐하면 docker 수호 프로그램에 대한 완전한 권한이 있기 때문입니다.

이렇게...읽어주셔서 감사합니다.


계속 공부하다🎯🎯

좋은 웹페이지 즐겨찾기