MCP 문서 관리

메뉴

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가 받게 됩니다.

사용 방법

설치 및 구성

  1. PyPI에서 설치:

    # uv를 사용한 설치
    uvx install mcp-server-docker

  2. Claude Desktop 구성 (MacOS): 파일 경로: ~/Library/Application\ Support/Claude/claude_desktop_config.json

    {
      "mcpServers": {
        "mcp-server-docker": {
          "command": "uvx",
          "args": ["mcp-server-docker"]
        }
      }
    }

  3. Claude Desktop 구성 (Windows): 파일 경로: %APPDATA%/Claude/claude_desktop_config.json

    {
      "mcpServers": {
        "mcp-server-docker": {
          "command": "uvx",
          "args": ["mcp-server-docker"]
        }
      }
    }

  4. 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"
          ]
        }
      }
    }

  5. SSH를 통한 원격 Docker 연결:

    {
      "mcpServers": {
        "mcp-server-docker": {
          "command": "uvx",
          "args": ["mcp-server-docker"],
          "env": {
            "DOCKER_HOST": "ssh://myusername@myhost.example.com"
          }
        }
      }
    }

기본 사용 예시

  1. 컨테이너 목록 확인:

    list_containers({all: true})

  2. Nginx 컨테이너 실행:

    run_container({
      image: "nginx:latest",
      name: "my-nginx",
      ports: {"80/tcp": 8080}
    })

  3. 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"
    })

  4. 컨테이너 로그 확인:

    fetch_container_logs({
      container_id: "wordpress",
      tail: 50
    })

  5. 자연어를 사용한 컨테이너 배포:

    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 서버