호스트에서 Docker 컨테이너로 디렉토리 복사하는 방법

DockerBeginner
지금 연습하기

소개

Docker 컨테이너는 개발자와 IT 전문가에게 필수적인 도구가 되었습니다. 일관되고 안정적인 방법으로 애플리케이션을 패키징하고 배포할 수 있도록 지원합니다. 이 튜토리얼에서는 호스트 머신에서 Docker 컨테이너로 디렉토리를 복사하는 과정을 살펴보며, 컨테이너화된 환경 내에서 파일과 데이터를 효율적으로 관리하는 방법을 알아볼 것입니다.

Docker 컨테이너 소개

Docker 는 개발자가 컨테이너화된 환경에서 애플리케이션을 구축, 배포 및 실행할 수 있도록 지원하는 인기 있는 오픈소스 플랫폼입니다. 컨테이너는 애플리케이션과 종속성을 패키징하여 서로 다른 환경에서 일관되고 안정적으로 실행되도록 하는 경량, 독립적, 그리고 자체 포함된 단위입니다.

Docker 컨테이너란 무엇인가요?

Docker 컨테이너는 애플리케이션의 코드, 종속성 및 구성을 단일, 휴대 가능하고 재현 가능한 패키지로 패키징하는 표준화된 소프트웨어 단위입니다. 컨테이너는 컨테이너의 청사진 역할을 하는 Docker 이미지에서 생성됩니다. 컨테이너는 호스트 시스템과 다른 컨테이너로부터 분리되어 일관되고 안정적인 런타임 환경을 제공합니다.

Docker 컨테이너 사용의 장점

  • 이식성: Docker 컨테이너는 서로 다른 운영 체제와 클라우드 환경에서 일관되게 실행될 수 있으므로, 기반 인프라에 관계없이 애플리케이션이 동일하게 작동합니다.
  • 확장성: 컨테이너는 애플리케이션의 변화하는 요구 사항에 맞춰 쉽게 확장하거나 축소할 수 있으므로 리소스 활용을 관리하고 최적화하기가 용이합니다.
  • 효율성: 컨테이너는 경량이며 호스트 시스템의 운영 체제를 공유하므로, 기존 가상 머신에 비해 오버헤드와 리소스 소비를 줄입니다.
  • 일관성: Docker 컨테이너는 일관되고 예측 가능한 런타임 환경을 제공하여 "내 컴퓨터에서는 작동하는데" 문제를 줄이고 애플리케이션 관리 및 유지보수를 용이하게 합니다.

Docker 아키텍처

Docker 는 Docker 클라이언트가 Docker 데몬 (서버) 과 통신하여 Docker 명령을 실행하는 클라이언트 - 서버 아키텍처를 따릅니다. Docker 데몬은 Docker 이미지, 컨테이너, 네트워크 및 볼륨을 관리하는 역할을 합니다.

graph LD subgraph Docker 아키텍처 Client -- Docker API --> Daemon Daemon -- Docker Engine --> Images Daemon -- Docker Engine --> Containers Daemon -- Docker Engine --> Networks Daemon -- Docker Engine --> Volumes end

Docker 컨테이너의 기본 개념과 아키텍처를 이해함으로써 Docker 를 사용하고 애플리케이션 개발 및 배포 프로세스에서 Docker 의 이점을 활용할 수 있습니다.

호스트에서 컨테이너로 파일 복사

Docker 컨테이너와 작업 시 호스트 시스템 (로컬 머신) 에서 컨테이너로 파일을 복사하는 것은 일반적인 작업입니다. 이는 애플리케이션에 컨테이너 이미지에 포함되지 않은 추가 파일, 구성 또는 데이터를 제공해야 할 때 필요합니다.

docker cp 명령

docker cp 명령은 호스트 시스템과 실행 중인 Docker 컨테이너 간에 파일 또는 디렉토리를 복사하는 데 사용됩니다. 명령의 구문은 다음과 같습니다.

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

여기서:

  • SRC_PATH는 호스트 시스템의 파일 또는 디렉토리 경로입니다.
  • CONTAINER는 Docker 컨테이너의 이름 또는 ID 입니다.
  • DEST_PATH는 파일 또는 디렉토리가 복사될 Docker 컨테이너 내의 경로입니다.

호스트 시스템에서 Docker 컨테이너로 디렉토리를 복사하는 방법의 예는 다음과 같습니다.

## 호스트의 "my-files" 디렉토리를 컨테이너의 "/app" 디렉토리로 복사
docker cp ./my-files mycontainer:/app

컨테이너 생성 시 파일 복사

또는 컨테이너 생성 과정에서 호스트 시스템에서 Docker 컨테이너로 파일을 복사할 수도 있습니다. 이는 Dockerfile 의 COPY 명령을 사용하여 수행되며, 이는 빌드 컨텍스트 (Dockerfile 이 있는 디렉토리) 에서 컨테이너의 파일 시스템으로 복사할 파일 또는 디렉토리를 지정합니다.

호스트 시스템에서 컨테이너로 디렉토리를 복사하는 예시 Dockerfile 은 다음과 같습니다.

## Dockerfile
FROM ubuntu:22.04
COPY ./my-files /app
CMD ["bash"]

이 예제에서 COPY 명령은 빌드 컨텍스트의 my-files 디렉토리를 컨테이너 내의 /app 디렉토리로 복사합니다.

호스트에서 Docker 컨테이너로 파일을 복사하는 방법을 이해함으로써 컨테이너화된 애플리케이션에 필요한 리소스를 더 효과적으로 관리하고 배포할 수 있습니다.

실제 사용 사례 및 예시

호스트에서 Docker 컨테이너로 파일을 복사하는 것은 다양한 시나리오에서 유용할 수 있습니다. 다음은 실제 사용 사례와 예시입니다.

구성 파일 제공

흔한 사용 사례 중 하나는 컨테이너화된 애플리케이션에 구성 파일을 제공하는 것입니다. 예를 들어, 데이터베이스 연결 세부 정보, 환경 변수 또는 애플리케이션에 맞춤 설정해야 하는 다른 설정이 포함된 구성 파일이 있을 수 있습니다.

## 호스트에서 컨테이너로 구성 파일 복사
docker cp ./my-app-config.yaml mycontainer:/app/config/

데이터 또는 자산 주입

또 다른 사용 사례는 컨테이너에 데이터 또는 자산을 주입하는 것입니다. 이는 다음과 같은 항목을 포함할 수 있습니다.

  • 데이터베이스 시드 데이터
  • 미디어 파일 (이미지, 비디오 등)
  • 정적 웹 콘텐츠
## 호스트에서 컨테이너로 정적 웹 콘텐츠 디렉토리 복사
docker cp ./web-content mycontainer:/var/www/html/

디버깅 및 문제 해결

호스트에서 컨테이너로 파일을 복사하는 것은 디버깅 및 문제 해결에도 유용할 수 있습니다. 예를 들어, 문제를 조사하기 위해 로그 파일이나 진단 도구를 컨테이너로 복사할 수 있습니다.

## 컨테이너에서 호스트로 로그 파일 복사하여 분석
docker cp mycontainer:/app/logs/app.log ./

지속적 통합 및 배포

지속적 통합 (CI) 또는 지속적 배포 (CD) 파이프라인에서 빌드 아티팩트, 테스트 보고서 또는 기타 파일을 호스트 시스템에서 컨테이너로 복사하여 추가 처리 또는 배포가 필요할 수 있습니다.

## CI/CD 파이프라인 중 호스트에서 컨테이너로 빌드 아티팩트 복사
docker cp ./build-artifacts mycontainer:/app/dist/

이러한 실제 사용 사례와 예시를 이해함으로써 Docker 기반 워크플로우와 애플리케이션에서 docker cp 명령과 COPY 명령을 더 효과적으로 활용할 수 있습니다.

요약

이 튜토리얼을 마치면 호스트 머신에서 Docker 컨테이너로 디렉토리를 복사하는 방법에 대한 확실한 이해를 얻게 될 것입니다. Docker 워크플로우를 간소화하고 컨테이너화된 애플리케이션 개발 프로세스를 향상시키는 데 도움이 되는 실제 사용 사례와 예시를 학습하게 될 것입니다.