도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법
도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법 🐳
도커를 사용하다 보면 컨테이너 내부에서 도커 명령어를 실행해야 하는 경우가 종종 발생합니다. 그리고 이때 필요한 기술이 바로 도커 소켓 마운트입니다.
1. 도커 소켓 마운트란?
도커 소켓 마운트는 호스트(운영체제)의 도커 데몬(Docker Daemon)과 통신하기 위해 사용되는 유닉스 소켓 /var/run/docker.sock
을 컨테이너 내부에 공유하는 방식입니다. 쉽게 말해, 컨테이너에게 호스트의 도커 데몬을 제어할 수 있는 권한을 주는 것이죠.
도커 데몬은 도커의 모든 작업을 관리하는 핵심 프로세스입니다. 컨테이너를 생성하고, 이미지를 관리하고, 네트워크를 설정하는 등 우리가 docker
명령어로 수행하는 모든 작업은 이 데몬을 통해 이루어집니다.
소켓(socket)은 네트워크 통신을 위해 데이터를 주고받을 때, 통신의 시작과 끝을 정의하는 역할을 합니다. IP 주소와 포트 번호로 구성된 소켓 주소를 통해 통신 대상을 식별하며, 전화처럼 신뢰성 있는 TCP 방식과 우편물처럼 빠르고 비연결성인 UDP 방식이 있습니다.
2. 왜 소켓 마운트가 필요한가요?
컨테이너는 기본적으로 격리된 환경에서 실행됩니다. 그렇기 때문에 컨테이너 내부에서는 docker 명령어를 직접 실행할 수 없습니다. 이때 도커 소켓을 마운트하면, 컨테이너 내부에서 docker 명령어를 실행하여 마치 호스트에서 직접 명령하는 것처럼 동작할 수 있게 됩니다.
이 기능은 다음과 같은 경우에 유용하게 사용됩니다.
- CI/CD 파이프라인: Jenkins와 같은 CI/CD 도구를 컨테이너로 실행할 때, 빌드된 이미지를 푸시하거나, 새로운 컨테이너를 배포하는 등의 작업을 수행해야 할 때.
- 도커 인 도커(Docker in Docker, DinD): 컨테이너 내부에서 또 다른 도커 환경을 구축해야 할 때. 예를 들어, 도커 이미지를 빌드하는 과정을 컨테이너 안에서 실행하고 싶을 때 사용됩니다.
- 관리 도구: Portainer와 같은 도커 GUI 관리 도구를 컨테이너로 실행하여 호스트의 도커 환경을 관리할 때.
3. 도커 소켓 마운트 설정 방법
docker
클라이언트가 설치된 이미지를 사용하거나, 컨테이너 내부에 docker
를 설치합니다. 컨테이너에서 아래 명령어를 실행하여 컨테이너를 실행합니다.
docker run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu bash
소켓으로 호스트와 연결된 컨테이너 내부에서 docker ps
명령어를 실행하여 호스트에서 실행 중인 컨테이너 목록을 확인할 수 있습니다.
root@<container_id>:# docker ps
4. docker-compose 설정하기
도커 컴포즈(docker-compose)에서 소켓 마운트를 추가하려면 volumes 섹션에 호스트의 도커 소켓 경로와 컨테이너 내부의 경로를 매핑하면 됩니다.
docker-compose.yml 파일에서 services 아래 특정 서비스에 volumes 키를 추가하고, 읽기 동작만 하는 경우 :/var/run/docker.sock을 :ro
옵션과 함께 설정합니다. :ro
는 읽기 전용(read-only)
을 의미하며, 보안을 강화하는 데 도움이 됩니다.
ro
옵션은 컨테이너가 마운트된 도커 소켓을 통해 호스트의 도커 환경을 제어할 수 있지만, 해당 소켓 파일 자체를 수정하거나 삭제하는 것을 방지하여 보안을 강화합니다. 이는 컨테이너가 악의적인 목적으로 호스트의 도커 환경을 조작하는 것을 어느 정도 막아주는 역할을 합니다.
version: '3.8'
services:
your-service-name:
image: your-image-name
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # Docker 소켓 마운트
5. 보안 위험성
도커 소켓 마운트는 강력한 기능인 만큼 보안 위험성이 존재합니다. 도커 소켓을 마운트한다는 것은 컨테이너에게 루트(root) 권한과 거의 동일한 제어 권한을 부여하는 것과 같습니다.
만약 악의적인 컨테이너가 도커 소켓에 접근하게 되면, 호스트 시스템의 모든 컨테이너를 삭제하거나, 새로운 컨테이너를 생성하여 시스템을 장악할 수 있습니다.
따라서 도커 소켓 마운트는 신뢰할 수 있는 컨테이너에만 제한적으로 사용해야 합니다.
5. 마무리
도커 소켓 마운트는 도커 환경을 유연하게 활용할 수 있게 해주는 매우 유용한 기술입니다. 하지만 그만큼 보안에 대한 고려가 필수적입니다.
카테고리 다른 글
Date | Title | Author |
---|---|---|
Aug 23, 2025 | Docker Compose로 호스트 실행 파일 실행하는 방법 🐳 | |
Aug 2, 2025 | docker-compose PostgreSQL DB 백업 및 복원 | |
Aug 1, 2025 | GCP VM 인스턴스에 도메인 연결하기 | |
Jul 26, 2025 | GCP VM 인스턴스에서 DB 및 서비스 이전 가이드 | |
Jul 19, 2025 | 윈도우에 ngrok 설치하고 사용하기 | |
Jun 5, 2025 | FastAPI에서 문서 접속을 환경설정으로 제한하는 방법 | |
May 5, 2025 | 포트를 점유하고 있는 서비스 제거하기 | |
Mar 20, 2025 | 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 | |
Feb 4, 2025 | Windows 11에서 WSL 설치 및 Docker 연결하기 | |
Oct 7, 2024 | Docker Compose로 Jenkins 설치 및 사용하기 | |
Aug 23, 2024 | 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 | |
Jul 24, 2024 | GitHub Actions 시작하기 | |
Dec 31, 2023 | 우분투와 윈도우 파일 공유하기 (samba) | |
Dec 5, 2023 | crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 | |
Nov 27, 2023 | 우분투 docker, docker-compse 설치 | |
Nov 26, 2023 | AWS 호스팅 EC2 와 Lightsail의 차이 | |
Nov 20, 2023 | wsl 이미지 저장 위치 변경 및 백업 | |
Nov 20, 2023 | airflow postgresoperator 사용하기 | |
Nov 18, 2023 | docker-compose로 airflow 설치하기 | |
Nov 15, 2023 | wsl2에 docker 설치하기 | |
Nov 15, 2023 | mkfifo를 이용한 IPC | |
Oct 9, 2023 | Github Pull Request 템플릿 적용하기 |