본문 바로가기
공부공부/2023 쌓여가는 나의 지식~

Docker 컨테이너 내부에서 모든 컨테이너 제어하기 (Docker socket)

by Lee_story_.. 2023. 9. 19.
728x90

 

보통 도커 컨테이너 내부에서 다른 컨테이너에 대한 정보를 제어할 일이 없을테지만 

 

저는 컨테이너 내부에 있는 컨테이너에서 웹 플랫폼을 구축하여

웹상에서 모든 컨테이너를 제어하려다 보니 위와 같은 문제가 생겼습니다.

 

 

많은 해결책들이 있었지만 생각보다 간단하게 해결되는 문제였기에 짧게 정리해 보겠습니다. 

 

 

시작!

 

도커 컴포즈, ssh 연결 등 다양한 방법들 중에 가장 쉬운 방법은

 

Docker socket을 이용하는것 이였습니다. 

 

 

 

먼저

 

아래와 같은 명령어를 입력하

 systemctl status docker

 

아래처럼 뜨게되는데 

 

여기서 도커의 기본구조에 대해서 알아보자면

 

도커의 구조는 크게 클라이언트/서버 두가지로 나뉩니다

command 명령어로 docker ps 등을 사용하는건 도커 클라이언트를 이용하는것으로

이 명령어를 소켓을 통해 도커 데몬 (= 서버)에 명령어를 전달하여 실행합니다. 

이렇게 실행한 결과는 도커 데몬에서 다시 클라이언트에 결과를 반환합니다. 

 

 

 

그림으로 그려보면 아래와 같은 형태인것 같습니다.

 

 

 

여기서 알 수있는 사실은 컨테이너 내부에서 도커 소켓에만 연결하면 도커데몬에 명령어를 전달하는 구조를 만들 수 있다!

 

연결하는 방법은 간단합니다. 

 

 

기본적으로 docker.socket은 /var/run 위치에 있는데 

 

컨테이너 생성시 

 

아래처럼  /var/run/docker.sock을 볼륨 마운트 해주면 됩니다 (공유)

sudo docker run -d -it --name container -v /var/run/docker.sock:/var/run/docker.sock cuda:base /bin/bash

 

그리고 컨테이너 내부에 도커를 설치해주면 

 

컨테이너 내부에서도 모든 컨테이너에 대해 제어가 가능해 집니다!

 

 

여기까지가 끝인데 만약 안된다면 아래 블로그참고!

(저는 오류가 안생겨서 여기까지만 진행했습니다.)

 

 

 

<참고블로그>

 

DasomOLI는 다솜돌이라구요~!DasomOLI의 개인적인 관심사를 모두 게으르게 다룹니다./var/run/docker.sock

도커 컨테이너 안에서 도커를 사용하는 방법은 Host의 /var/run/docker.sock를 컨테이너에서 bind mount하면 된다. 쉽게 설명해 docker run 할 때 아래처럼 -v /var/run/docker.sock:/var/run/docker.sock 옵션을 주면 된다

blog.dasomoli.org

 

 

도커의 구조를 간략하게 알아보자

다섯줄 요약 도커의 구조는 크게 클라이언트/서버 두가지로 나뉜다. 사용자가 docker version과 같은 도커 명령어를 입력하는 것은 도커 클라이언트를 이용하는 것이다. 입력한 도커 명령어는 소켓

joanne.tistory.com

 

 

 

 

 

 

 

 

틀린점이 있다면 댓 달아주세요!

 

 

댓글