Docker 컨테이너 내 파일 이동 방법

DockerBeginner
지금 연습하기

소개

Docker 는 개발자의 작업 방식을 혁신하여 애플리케이션을 구축, 테스트 및 배포하는 일관되고 안정적인 환경을 제공합니다. 이 튜토리얼에서는 Docker 컨테이너 내에서 파일을 이동하는 과정을 탐색하여 프로젝트 자산 및 리소스를 효율적으로 관리하는 방법을 배우게 될 것입니다.

Docker 컨테이너 이해

Docker 는 개발자가 일관되고 격리된 환경에서 애플리케이션을 패키징하고 배포할 수 있도록 지원하는 인기 있는 컨테이너화 플랫폼입니다. 컨테이너는 애플리케이션과 그 종속성을 캡슐화하는 경량, 휴대 가능하고 자체 포함된 단위로, 다양한 환경에서 애플리케이션을 쉽게 이동하고 실행할 수 있도록 합니다.

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

Docker 컨테이너는 애플리케이션과 모든 종속성 (코드, 런타임, 시스템 도구 및 라이브러리) 을 단일, 휴대 가능하고 자체 포함된 환경으로 패키징하는 표준화된 소프트웨어 단위입니다. 컨테이너는 컨테이너의 내용을 정의하는 읽기 전용 템플릿인 Docker 이미지에서 생성됩니다.

Docker 컨테이너의 장점

  1. 일관성: 컨테이너는 기본 인프라에 관계없이 애플리케이션이 동일한 방식으로 실행되도록 보장하여 일관되고 예측 가능한 환경을 제공합니다.
  2. 확장성: 컨테이너는 쉽게 확장 및 축소할 수 있으므로 애플리케이션이 증가된 작업 부하를 처리하거나 필요에 따라 리소스 사용량을 줄일 수 있습니다.
  3. 휴대성: Docker 가 설치된 모든 시스템에서 컨테이너를 실행할 수 있으므로 개발, 테스트 및 프로덕션과 같은 다양한 환경 간에 애플리케이션을 쉽게 이동할 수 있습니다.
  4. 효율성: 컨테이너는 호스트 운영 체제의 커널을 공유하기 때문에 가상 머신보다 더 경량으로, 시작 시간이 빨라지고 리소스 사용량이 줄어듭니다.

Docker 아키텍처

Docker 는 Docker 클라이언트가 Docker 데몬 (서버) 과 통신하여 컨테이너를 구축, 실행 및 관리하는 등 다양한 작업을 수행하는 클라이언트 - 서버 아키텍처를 사용합니다. Docker 데몬은 컨테이너, 이미지, 네트워크 및 볼륨과 같은 Docker 객체를 관리하는 역할을 합니다.

graph LR
    A[Docker 클라이언트] -- 명령어 --> B[Docker 데몬]
    B -- 명령어 실행 --> C[Docker 객체]

Docker 컨테이너와 가상 머신

컨테이너와 가상 머신 (VM) 모두 격리된 환경에서 애플리케이션을 실행하는 방법을 제공하지만 접근 방식과 구현 방식이 다릅니다. 컨테이너는 호스트 운영 체제의 커널을 사용하는 반면, VM 은 자체 게스트 운영 체제를 가지므로 컨테이너가 더 경량적이고 효율적입니다.

특징 컨테이너 가상 머신
격리 애플리케이션 수준 격리 전체 운영 체제 격리
리소스 사용량 경량, 호스트 OS 커널 공유 중량, 각 VM 은 자체 OS 소유
시작 시간 몇 초 몇 분
휴대성 높은 휴대성 낮은 휴대성

요약하자면, Docker 컨테이너는 애플리케이션을 패키징하고 배포하는 일관성 있고 확장 가능하며 효율적인 방법을 제공하여 현대 소프트웨어 개발 및 배포 관행에서 인기 있는 선택이 되었습니다.

Docker 파일 시스템 사용

Docker 파일 시스템을 이해하는 것은 컨테이너를 효과적으로 관리하고 상호 작용하는 데 필수적입니다. Docker 컨테이너는 호스트 운영 체제의 파일 시스템과는 별도의 자체 파일 시스템을 가지고 있습니다.

Docker 파일 시스템 레이어

Docker 이미지는 일련의 읽기 전용 레이어를 사용하여 구축되며, 각 레이어는 파일 시스템의 변경 사항을 나타냅니다. 이미지에서 컨테이너를 생성할 때 이미지 레이어 위에 새로운 읽기/쓰기 레이어가 추가되어 컨테이너가 기본 이미지를 변경하지 않고 파일을 수정할 수 있습니다.

graph TB
    A[Docker 이미지] --> B[읽기 전용 레이어]
    B --> C[읽기/쓰기 레이어]
    C --> D[Docker 컨테이너]

컨테이너 파일 시스템 액세스

실행 중인 Docker 컨테이너의 파일 시스템에 액세스하려면 docker exec 명령어를 사용할 수 있습니다. 이 명령어는 실행 중인 컨테이너 내에서 파일 시스템을 탐색하는 것을 포함하여 컨테이너 내에서 명령어를 실행할 수 있도록 합니다.

## 컨테이너 실행
docker run -d --name my-container ubuntu:latest

## 컨테이너 파일 시스템 액세스
docker exec -it my-container /bin/bash

컨테이너 내부에 들어가면 ls, cd, cat과 같은 표준 Linux 명령어를 사용하여 파일 시스템을 탐색할 수 있습니다.

호스트와 컨테이너 간 파일 복사

docker cp 명령어를 사용하여 호스트 시스템과 실행 중인 컨테이너 간에 파일을 복사할 수 있습니다.

## 호스트에서 컨테이너로 파일 복사
docker cp /path/on/host my-container:/path/in/container

## 컨테이너에서 호스트로 파일 복사
docker cp my-container:/path/in/container /path/on/host

이를 통해 호스트와 컨테이너 간에 파일 및 데이터를 쉽게 전송하여 개발 및 배포 워크플로우를 용이하게 할 수 있습니다.

볼륨을 사용한 데이터 지속

Docker 볼륨은 컨테이너 수명을 초과하여 데이터를 지속하는 방법을 제공합니다. 볼륨은 컨테이너의 파일 시스템 외부에 저장되며 컨테이너 간에 공유되거나 호스트 파일 시스템에 연결될 수 있습니다.

## 볼륨 생성
docker volume create my-volume

## 볼륨을 사용하여 컨테이너 실행
docker run -d --name my-container -v my-volume:/app ubuntu:latest

볼륨을 사용하면 컨테이너가 중지되거나 제거될 때 중요한 데이터가 손실되지 않도록 보장하여 Docker 파일 시스템 작업의 중요한 측면이 됩니다.

Docker 에서 파일 이동

Docker 컨테이너 내에서 파일을 이동하는 것은 애플리케이션 개발, 테스트 또는 배포 과정에서 자주 수행하는 작업입니다. Docker 는 호스트 시스템과 컨테이너 간의 파일 관리 및 전송을 위한 여러 가지 방법을 제공합니다.

호스트와 컨테이너 간 파일 복사

이전 섹션에서 소개한 docker cp 명령어를 사용하여 호스트 시스템과 실행 중인 컨테이너 간에 파일을 복사할 수 있습니다. 특히 개발 및 디버깅 중에 파일을 전송하는 편리한 방법입니다.

## 호스트에서 컨테이너로 파일 복사
docker cp /path/on/host my-container:/path/in/container

## 컨테이너에서 호스트로 파일 복사
docker cp my-container:/path/in/container /path/on/host

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

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

## 마운트된 호스트 디렉터리를 사용하여 컨테이너 실행
docker run -d --name my-container -v /path/on/host:/app ubuntu:latest

이 예제에서 호스트 시스템의 /path/on/host 디렉터리가 컨테이너 내의 /app 디렉터리로 마운트됩니다. 컨테이너 내의 /app 디렉터리의 파일을 변경하면 호스트 시스템의 /path/on/host 디렉터리에도 반영되고 그 반대의 경우도 마찬가지입니다.

바인드 마운트 사용

바인드 마운트는 컨테이너에 호스트 디렉터리를 마운트하는 더 유연한 방법입니다. 소스 및 대상 경로를 명시적으로 지정할 수 있으며, 개별 파일이나 디렉터리를 마운트하는 데 사용할 수 있습니다.

## 바인드 마운트를 사용하여 컨테이너 실행
docker run -d --name my-container -v /path/on/host:/path/in/container ubuntu:latest

바인드 마운트는 호스트와 컨테이너 간의 파일 시스템 매핑에 대한 더 많은 제어권을 제공하여 특정 파일이나 디렉터리에 액세스해야 하는 시나리오에서 유용합니다.

Docker 에서 파일 이동 기술을 이해함으로써 컨테이너 내의 파일 시스템을 효과적으로 관리하고 개발, 테스트 및 배포 워크플로우를 용이하게 할 수 있습니다.

요약

이 튜토리얼을 마치면 Docker 파일 시스템과 Docker 컨테이너 내에서 파일을 이동하는 기술에 대한 확실한 이해를 얻게 될 것입니다. 이 지식은 Docker 작업 시 원활하고 효율적인 경험을 보장하여 개발 워크플로우를 간소화하는 데 도움이 될 것입니다.