도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법

DevOps
도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법
Author

gabriel yang

Published

August 24, 2025

도커 소켓 마운트: 컨테이너에서 도커를 제어하는 방법 🐳

도커를 사용하다 보면 컨테이너 내부에서 도커 명령어를 실행해야 하는 경우가 종종 발생합니다. 그리고 이때 필요한 기술이 바로 도커 소켓 마운트입니다.

1. 도커 소켓 마운트란?

도커 소켓 마운트는 호스트(운영체제)의 도커 데몬(Docker Daemon)과 통신하기 위해 사용되는 유닉스 소켓 /var/run/docker.sock을 컨테이너 내부에 공유하는 방식입니다. 쉽게 말해, 컨테이너에게 호스트의 도커 데몬을 제어할 수 있는 권한을 주는 것이죠.

도커 데몬은 도커의 모든 작업을 관리하는 핵심 프로세스입니다. 컨테이너를 생성하고, 이미지를 관리하고, 네트워크를 설정하는 등 우리가 docker 명령어로 수행하는 모든 작업은 이 데몬을 통해 이루어집니다.

Note

소켓(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로 호스트 실행 파일 실행하는 방법 🐳 gabriel yang
Aug 2, 2025 docker-compose PostgreSQL DB 백업 및 복원 gabriel yang
Aug 1, 2025 GCP VM 인스턴스에 도메인 연결하기 gabriel yang
Jul 26, 2025 GCP VM 인스턴스에서 DB 및 서비스 이전 가이드 gabriel yang
Jul 19, 2025 윈도우에 ngrok 설치하고 사용하기 gabriel yang
Jun 5, 2025 FastAPI에서 문서 접속을 환경설정으로 제한하는 방법 gabriel yang
May 5, 2025 포트를 점유하고 있는 서비스 제거하기 gabriel yang
Mar 20, 2025 우분투(Ubuntu)에서 ngrok 설치 및 사용 방법 gabriel yang
Feb 4, 2025 Windows 11에서 WSL 설치 및 Docker 연결하기 gabriel yang
Oct 7, 2024 Docker Compose로 Jenkins 설치 및 사용하기 gabriel yang
Aug 23, 2024 우분투(Ubuntu)에서 특정 폴더를 아파치 서버로 설정하기 gabriel yang
Jul 24, 2024 GitHub Actions 시작하기 gabriel yang
Dec 31, 2023 우분투와 윈도우 파일 공유하기 (samba) gabriel yang
Dec 5, 2023 crontab을 이용해서 Let’s Encrypt SSL 인증서 자동갱신 gabriel yang
Nov 27, 2023 우분투 docker, docker-compse 설치 gabriel yang
Nov 26, 2023 AWS 호스팅 EC2 와 Lightsail의 차이 gabriel yang
Nov 20, 2023 wsl 이미지 저장 위치 변경 및 백업 gabriel yang
Nov 20, 2023 airflow postgresoperator 사용하기 gabriel yang
Nov 18, 2023 docker-compose로 airflow 설치하기 gabriel yang
Nov 15, 2023 wsl2에 docker 설치하기 gabriel yang
Nov 15, 2023 mkfifo를 이용한 IPC gabriel yang
Oct 9, 2023 Github Pull Request 템플릿 적용하기 gabriel yang
No matching items