Docker
Docker
Docker MCP 서버는 컨테이너, 이미지, 볼륨 및 네트워크를 관리하기 위한 Docker 통합을 제공하는 Model Context Protocol 서버입니다. 이 서버를 통해 자연어를 사용하여 Docker 환경을 관리하고 컨테이너화된 애플리케이션을 배포할 수 있습니다.
특징
- 자연어를 통한 Docker Compose 기능 제공
- 실행 중인 컨테이너 모니터링 및 디버깅
- Docker 볼륨을 통한 영구 데이터 관리
- 컨테이너 로그 조회 및 분석
- 이미지 빌드, 푸시, 풀 작업 지원
- 네트워크 생성 및 관리
- 원격 Docker 엔진 연결 지원 (SSH)
- 여러 컨테이너로 구성된 복잡한 스택 배포
- 컨테이너 상태 및 리소스 사용량 모니터링
- 프로젝트 기반 컨테이너 그룹 관리
API
리소스
컨테이너 통계
- 컨테이너의 CPU, 메모리 등 리소스 사용량 통계
컨테이너 로그
- 컨테이너에서 생성된 로그
도구
컨테이너 관리
list_containers
모든 컨테이너를 나열합니다. - 입력: - all: (선택적) 중지된 컨테이너도 포함할지 여부 (기본값: true) - filters: (선택적) 필터링 조건 (예: {"label": ["project=wordpress"]})
create_container
새 컨테이너를 생성합니다 (시작하지 않음). - 입력: - image: 사용할 이미지 이름 - name: (선택적) 컨테이너 이름 - ports: (선택적) 포트 매핑 (예: {"8080/tcp": 80}) - volumes: (선택적) 볼륨 매핑 (예: {"/host/path": {"bind": "/container/path", "mode": "rw"}}) - environment: (선택적) 환경 변수 - command: (선택적) 실행할 명령어 - network: (선택적) 연결할 네트워크 이름
run_container
컨테이너를 생성하고 시작합니다. - 입력: - image: 사용할 이미지 이름 - name: (선택적) 컨테이너 이름 - ports: (선택적) 포트 매핑 (예: {"8080/tcp": 80}) - volumes: (선택적) 볼륨 매핑 (예: {"/host/path": {"bind": "/container/path", "mode": "rw"}}) - environment: (선택적) 환경 변수 - command: (선택적) 실행할 명령어 - network: (선택적) 연결할 네트워크 이름 - detach: (선택적) 백그라운드에서 실행할지 여부 (기본값: true)
recreate_container
기존 컨테이너를 제거하고 동일한 구성으로 새로 생성합니다. - 입력: - container_id: 재생성할 컨테이너 ID 또는 이름
start_container
중지된 컨테이너를 시작합니다. - 입력: - container_id: 시작할 컨테이너 ID 또는 이름
fetch_container_logs
컨테이너 로그를 가져옵니다. - 입력: - container_id: 로그를 가져올 컨테이너 ID 또는 이름 - tail: (선택적) 가져올 마지막 로그 라인 수 (기본값: 100) - since: (선택적) 특정 시간 이후의 로그만 가져오기 (예: "2025-05-12T00:00:00") - timestamps: (선택적) 타임스탬프 포함 여부 (기본값: true)
stop_container
실행 중인 컨테이너를 중지합니다. - 입력: - container_id: 중지할 컨테이너 ID 또는 이름 - timeout: (선택적) 강제 종료 전 대기 시간(초) (기본값: 10)
remove_container
컨테이너를 제거합니다. - 입력: - container_id: 제거할 컨테이너 ID 또는 이름 - force: (선택적) 실행 중인 컨테이너도 강제로 제거할지 여부 (기본값: false) - volumes: (선택적) 연결된 익명 볼륨도 함께 제거할지 여부 (기본값: false)
이미지 관리
list_images
모든 이미지를 나열합니다. - 입력: - all: (선택적) 중간 이미지도 포함할지 여부 (기본값: false) - filters: (선택적) 필터링 조건 (예: {"reference": ["nginx:latest"]})
pull_image
이미지를 가져옵니다. - 입력: - repository: 가져올 이미지 저장소 (예: "nginx") - tag: (선택적) 태그 (기본값: "latest")
push_image
이미지를 푸시합니다. - 입력: - repository: 푸시할 이미지 저장소 - tag: (선택적) 태그 (기본값: "latest")
build_image
Dockerfile에서 이미지를 빌드합니다. - 입력: - path: Dockerfile이 있는 경로 - tag: 빌드할 이미지 태그 - dockerfile: (선택적) Dockerfile 이름 (기본값: "Dockerfile") - buildargs: (선택적) 빌드 인자
remove_image
이미지를 제거합니다. - 입력: - image: 제거할 이미지 ID 또는 이름 - force: (선택적) 사용 중인 이미지도 강제로 제거할지 여부 (기본값: false)
네트워크 관리
list_networks
모든 네트워크를 나열합니다. - 입력: - filters: (선택적) 필터링 조건 (예: {"driver": ["bridge"]})
create_network
새 네트워크를 생성합니다. - 입력: - name: 생성할 네트워크 이름 - driver: (선택적) 드라이버 (기본값: "bridge") - options: (선택적) 드라이버 옵션 - internal: (선택적) 내부 네트워크 여부 (기본값: false) - labels: (선택적) 레이블
remove_network
네트워크를 제거합니다. - 입력: - network_id: 제거할 네트워크 ID 또는 이름
볼륨 관리
list_volumes
모든 볼륨을 나열합니다. - 입력: - filters: (선택적) 필터링 조건 (예: {"name": ["my-volume"]})
create_volume
새 볼륨을 생성합니다. - 입력: - name: 생성할 볼륨 이름 - driver: (선택적) 드라이버 (기본값: "local") - driver_opts: (선택적) 드라이버 옵션 - labels: (선택적) 레이블
remove_volume
볼륨을 제거합니다. - 입력: - volume_id: 제거할 볼륨 이름 - force: (선택적) 사용 중인 볼륨도 강제로 제거할지 여부 (기본값: false)
프롬프트
docker_compose
자연어를 사용하여 Docker 컨테이너를 구성하고 관리할 수 있는 프롬프트입니다. 프로젝트 이름과 원하는 컨테이너 설명을 제공하면 AI가 계획을 세우고 Docker 컨테이너를 설정합니다.
이 프롬프트는 다음과 같은 사용자 경험을 제공합니다: 1. 사용자가 원하는 컨테이너 구성을 자연어로 설명합니다. 2. AI가 간결한 자연어 계획을 계산하고 제시합니다. 3. 사용자는 다음 중 하나를 선택합니다: - 계획을 적용합니다. - AI에 피드백을 제공하고, AI는 계획을 재계산합니다.
예시:
- 이름: nginx, 컨테이너: "포트 9000에 노출된 nginx 컨테이너 배포"
- 이름: wordpress, 컨테이너: "WordPress 컨테이너와 지원 MySQL 컨테이너를 배포하고, WordPress를 포트 9000에 노출"
프로젝트 재개: 새 채팅에서 이 프롬프트를 시작하면 지정된 프로젝트 이름으로 생성된 컨테이너, 볼륨 및 네트워크의 상태를 AI가 받게 됩니다.
사용 방법
설치 및 구성
-
PyPI에서 설치:
# uv를 사용한 설치 uvx install mcp-server-docker -
Claude Desktop 구성 (MacOS): 파일 경로:
~/Library/Application\ Support/Claude/claude_desktop_config.json{ "mcpServers": { "mcp-server-docker": { "command": "uvx", "args": ["mcp-server-docker"] } } } -
Claude Desktop 구성 (Windows): 파일 경로:
%APPDATA%/Claude/claude_desktop_config.json{ "mcpServers": { "mcp-server-docker": { "command": "uvx", "args": ["mcp-server-docker"] } } } -
Docker를 사용한 설치:
# Docker 이미지 빌드 docker build -t mcp-server-docker . # Claude Desktop 구성 { "mcpServers": { "mcp-server-docker": { "command": "docker", "args": [ "run", "-i", "--rm", "-v", "/var/run/docker.sock:/var/run/docker.sock", "mcp-server-docker:latest" ] } } } -
SSH를 통한 원격 Docker 연결:
{ "mcpServers": { "mcp-server-docker": { "command": "uvx", "args": ["mcp-server-docker"], "env": { "DOCKER_HOST": "ssh://myusername@myhost.example.com" } } } }
기본 사용 예시
-
컨테이너 목록 확인:
list_containers({all: true}) -
Nginx 컨테이너 실행:
run_container({ image: "nginx:latest", name: "my-nginx", ports: {"80/tcp": 8080} }) -
WordPress 및 MySQL 설정:
// 네트워크 생성 create_network({name: "wordpress-network"}) // MySQL 컨테이너 실행 run_container({ image: "mysql:5.7", name: "wordpress-db", environment: { "MYSQL_ROOT_PASSWORD": "my-secret-pw", "MYSQL_DATABASE": "wordpress", "MYSQL_USER": "wordpress", "MYSQL_PASSWORD": "wordpress" }, network: "wordpress-network" }) // WordPress 컨테이너 실행 run_container({ image: "wordpress:latest", name: "wordpress", ports: {"80/tcp": 9000}, environment: { "WORDPRESS_DB_HOST": "wordpress-db", "WORDPRESS_DB_USER": "wordpress", "WORDPRESS_DB_PASSWORD": "wordpress", "WORDPRESS_DB_NAME": "wordpress" }, network: "wordpress-network" }) -
컨테이너 로그 확인:
fetch_container_logs({ container_id: "wordpress", tail: 50 }) -
자연어를 사용한 컨테이너 배포:
docker_compose 프롬프트 사용: 이름: nginx-php 컨테이너: "Nginx 웹 서버와 PHP-FPM 컨테이너를 배포하고, 이들을 연결하여 PHP 애플리케이션을 실행합니다. Nginx는 포트 8080에 노출하고, 두 컨테이너는 같은 볼륨에서 웹 콘텐츠를 공유해야 합니다."
보안 고려사항
- 민감한 데이터: Docker 컨테이너에 API 키, 데이터베이스 비밀번호 등 민감한 데이터를 구성하지 마세요. LLM과 교환되는 모든 민감한 데이터는 본질적으로 노출될 수 있습니다.
- 생성된 컨테이너 검토: LLM이 생성하는 컨테이너를 신중하게 검토하세요. Docker는 안전한 샌드박스가 아니며, Docker를 통해 호스트 머신에 영향을 미칠 수 있습니다.
- 제한된 기능: 이 MCP 서버는 보안상의 이유로
--privileged또는--cap-add/--cap-drop과 같은 민감한 Docker 옵션을 지원하지 않습니다. - 원격 연결: SSH를 통해 원격 Docker 데몬에 연결하는 경우, SSH 키 관리와 네트워크 보안에 주의하세요.
- 리소스 제한: 컨테이너의 리소스 사용을 제한하고 모니터링하여 호스트 시스템의 안정성을 유지하세요.
연결된 구성 요소
- Kubernetes - 쿠버네티스 클러스터에 연결하고 파드, 배포 및 서비스 관리
- Git - 선택적 푸시 지원을 포함한 로컬 git 저장소와 상호작용
- Kubernetes and OpenShift - OpenShift에 대한 추가 지원이 포함된 강력한 Kubernetes MCP 서버