Docker 컨테이너에서 호스트로 파일 전송 방법

DockerBeginner
지금 연습하기

소개

컨테이너화 세계에서 Docker 컨테이너와 호스트 머신 간의 파일 전송 능력은 필수적인 기술입니다. 이 튜토리얼에서는 Docker 컨테이너에서 호스트로 파일을 전송하는 과정을 안내하고, 필수적인 개념을 다루며 실제 예제를 제공하여 "docker cp" 명령어를 마스터하는 데 도움을 드립니다.

Docker 컨테이너 이해

Docker 는 개발자가 애플리케이션과 종속성을 격리되고, 휴대 가능하며, 재현 가능한 환경 (컨테이너) 으로 패키징할 수 있는 인기 있는 컨테이너화 플랫폼입니다. 이러한 컨테이너는 배포, 확장 및 관리가 용이하여 개발 및 배포 프로세스를 더욱 효율적이고 일관되게 만듭니다.

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

Docker 컨테이너는 애플리케이션 실행에 필요한 모든 것을 포함하는 경량, 독립 실행형, 실행 가능한 소프트웨어 패키지입니다. 코드, 런타임, 시스템 도구, 라이브러리 및 설정이 포함됩니다. 컨테이너는 서로 그리고 호스트 운영 체제와 격리되어 있어 환경에 관계없이 애플리케이션이 일관되게 실행되도록 보장합니다.

Docker 아키텍처

Docker 는 Docker 클라이언트가 Docker 데몬과 통신하는 클라이언트 - 서버 아키텍처를 사용합니다. Docker 데몬은 컨테이너를 구축, 실행 및 관리하는 역할을 합니다. Docker 데몬은 호스트 머신에서 실행되고, 클라이언트는 동일한 머신 또는 원격 머신에서 실행될 수 있습니다.

graph LR
    A[Docker Client] -- Communicates with --> B[Docker Daemon]
    B -- Manages --> C[Docker Containers]
    B -- Manages --> D[Docker Images]
    B -- Runs on --> E[Host Machine]

Docker 컨테이너의 장점

  • 이식성: 컨테이너는 개발자의 랩톱에서 프로덕션 서버에 이르기까지 다양한 환경에서 일관되게 실행될 수 있으므로 애플리케이션이 동일한 방식으로 작동합니다.
  • 확장성: 컨테이너는 용이하게 확장 및 축소할 수 있으므로 애플리케이션이 증가된 트래픽 또는 부하를 처리할 수 있습니다.
  • 효율성: 컨테이너는 경량이며 호스트 운영 체제를 공유하여 기존 가상 머신에 비해 오버헤드를 줄입니다.
  • 격리: 컨테이너는 서로 그리고 호스트 시스템과 격리되어 있어 보안을 강화하고 애플리케이션 간 충돌을 방지합니다.
  • 재현성: 컨테이너는 쉽게 재생성 및 배포할 수 있으므로 애플리케이션 환경이 개발 및 배포 파이프라인의 다양한 단계에서 일관되게 유지됩니다.

Docker 이미지와 컨테이너

Docker 이미지는 Docker 컨테이너를 만드는 설계도입니다. Dockerfile 을 사용하여 구축되며, Dockerfile 은 이미지를 생성하는 단계를 정의하는 텍스트 파일입니다. Docker 컨테이너는 Docker 이미지의 실행 인스턴스이며, Docker 명령을 사용하여 시작, 중지 및 관리할 수 있습니다.

graph LR
    A[Dockerfile] -- Builds --> B[Docker Image]
    B -- Runs as --> C[Docker Container]

Docker 컨테이너의 기본 개념을 이해함으로써 이제 Docker 컨테이너와 호스트 시스템 간의 파일 전송 방법을 학습할 수 있습니다.

Docker 컨테이너와 호스트 간 파일 전송

Docker 컨테이너와 호스트 시스템 간의 파일 전송은 개발, 테스트 또는 배포 중에 수행해야 할 일반적인 작업입니다. Docker 는 이를 달성하는 여러 가지 방법을 제공하며, 선택하는 방법은 특정 사용 사례에 따라 달라집니다.

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

Docker 컨테이너에서 호스트 시스템으로 파일을 복사하려면 docker cp 명령어를 사용할 수 있습니다. 이 명령어를 사용하면 컨테이너에서 호스트로 또는 그 반대로 파일이나 디렉터리를 복사할 수 있습니다.

## 컨테이너에서 호스트로 파일 복사
docker cp my_container:/path/to/file.txt /host/path/

## 컨테이너에서 호스트로 디렉터리 복사
docker cp my_container:/path/to/directory /host/path/

호스트 디렉터리를 볼륨으로 마운트

Docker 컨테이너와 호스트 간의 파일 전송을 위한 또 다른 방법은 호스트 디렉터리를 컨테이너의 볼륨으로 마운트하는 것입니다. 이렇게 하면 컨테이너가 호스트 시스템의 파일을 직접 액세스할 수 있습니다.

## 마운트된 볼륨으로 컨테이너 실행
docker run -v /host/path:/container/path my_image

## 이제 컨테이너는 /host/path 디렉터리의 파일을 액세스할 수 있습니다.

바인드 마운트

바인드 마운트는 호스트의 디렉터리를 컨테이너의 디렉터리에 직접 매핑하는 볼륨의 한 유형입니다. 이를 통해 호스트와 컨테이너 간에 양방향 파일 전송이 가능합니다.

## 바인드 마운트로 컨테이너 실행
docker run -v /host/path:/container/path:rw my_image

## 컨테이너는 /host/path 디렉터리의 파일을 읽고 쓸 수 있습니다.

볼륨

Docker 볼륨은 컨테이너 내 데이터를 관리하는 또 다른 방법입니다. 볼륨은 Docker 에 의해 관리되며 컨테이너와 호스트 간의 데이터 저장 및 전송에 사용될 수 있습니다.

## 볼륨 생성
docker volume create my_volume

## 볼륨으로 컨테이너 실행
docker run -v my_volume:/container/path my_image

## 컨테이너는 my_volume 볼륨의 파일을 액세스할 수 있습니다.

Docker 컨테이너와 호스트 간의 파일 전송을 위한 이러한 다양한 방법을 이해함으로써 특정 사용 사례와 요구 사항에 가장 적합한 방법을 선택할 수 있습니다.

실제 사용 사례 및 예시

Docker 컨테이너와 호스트 시스템 간의 파일 전송은 다양한 실제 응용 분야를 가지고 있습니다. 다음은 이 기능을 어떻게 사용할 수 있는지 보여주는 몇 가지 예시입니다.

로깅 및 디버깅

일반적인 사용 사례 중 하나는 실행 중인 컨테이너의 로그 파일을 호스트 시스템으로 복사하여 분석 및 디버깅하는 것입니다. 이는 프로덕션 환경에서 문제를 해결할 때 특히 유용합니다.

## 컨테이너에서 호스트로 로그 파일 복사
docker cp my_container:/app/logs/app.log /host/path/

데이터 지속성

상태 ful 애플리케이션을 사용할 때 컨테이너 외부에 데이터를 지속해야 할 수 있습니다. 호스트 디렉터리를 볼륨으로 마운트하면 데이터가 호스트에 저장되고 컨테이너가 중지되거나 삭제되더라도 액세스할 수 있도록 보장할 수 있습니다.

## 데이터 지속성을 위해 볼륨이 마운트된 컨테이너 실행
docker run -v /host/path/data:/container/path/data my_image

백업 및 복원

또 다른 사용 사례는 컨테이너의 데이터를 백업하고 복원하는 것입니다. docker cp 명령어를 사용하여 컨테이너에서 호스트로 중요한 파일이나 디렉터리를 복사한 다음, 필요에 따라 이러한 백업을 사용하여 데이터를 복원할 수 있습니다.

## 백업을 위해 컨테이너에서 호스트로 디렉터리 복사
docker cp my_container:/app/data /host/path/backup/

개발 및 테스트

개발 및 테스트 과정에서 소스 코드, 구성 파일 또는 테스트 데이터와 같은 파일을 호스트와 컨테이너 사이에서 전송해야 할 수 있습니다. Docker 에서 제공하는 다양한 파일 전송 방법을 사용하면 이러한 워크플로를 간소화할 수 있습니다.

## 호스트에서 컨테이너로 파일 복사
docker cp /host/path/file.txt my_container:/app/

이러한 실제 사용 사례와 예시를 이해함으로써 Docker 컨테이너와 호스트 시스템 간의 파일 전송 기능의 가치와 개발, 배포 및 유지 관리 워크플로를 향상시키는 방법을 더 잘 이해할 수 있습니다.

요약

이 튜토리얼을 마치면 "docker cp" 명령어를 사용하여 Docker 컨테이너에서 호스트 머신으로 파일을 전송하는 방법에 대한 포괄적인 이해를 얻게 됩니다. 다양한 사용 사례와 실제 예제를 통해 Docker 기반 프로젝트 내에서 파일을 원활하게 관리할 수 있도록 능력을 향상시킬 것입니다.