개발/Docker

Docker 컨테이너와 이미지 관리: 생성, 백업, 복원

피터JK 2025. 1. 15. 17:26
728x90

Docker 컨테이너와 이미지 관리: 생성, 백업, 복원

1. Docker 이미지란 무엇인가?

  • 이미지의 정의: Docker 이미지란 컨테이너 실행을 위한 파일 시스템을 포함한 읽기 전용 템플릿입니다. 이미지는 컨테이너의 "스냅샷"과 같으며, 실제 실행될 때는 컨테이너로 변환됩니다.
  • 이미지 레이어: Docker 이미지가 여러 레이어로 구성된다는 점을 강조하고, 레이어가 어떻게 캐시되고 재사용되는지 설명합니다.
  • 이미지의 저장소: Docker Hub와 같은 중앙 저장소에 이미지를 푸시하거나, Docker Registry를 사용하여 개인 이미지를 관리할 수 있습니다.

2. Docker 컨테이너 생성

  • 컨테이너의 정의: Docker 컨테이너는 Docker 이미지를 기반으로 실행되는 가벼운 독립적인 실행 환경입니다. 컨테이너는 격리된 환경에서 실행되며, 호스트 운영 체제의 커널을 공유합니다.
  • 컨테이너 실행 명령어:
    • docker run 명령어는 이미지를 기반으로 새로운 컨테이너를 시작합니다. 예를 들어:
      docker run -d -p 80:80 --name mynginx nginx
      • -d: 백그라운드에서 실행
      • -p 80:80: 호스트의 80 포트를 컨테이너의 80 포트와 연결
      • --name: 컨테이너 이름 설정
      • nginx: 사용할 Docker 이미지
    • 컨테이너의 다른 설정 옵션들:
      • 볼륨 마운트: -v /path/on/host:/path/in/container 옵션으로 호스트와 컨테이너 간의 파일 공유.
      • 환경 변수: -e VAR_NAME=value로 환경 변수 전달.
      • 인터랙티브 모드: -it 옵션을 사용해 터미널에 연결하여 컨테이너 내에서 작업.

3. Docker 이미지 빌드

  • Dockerfile: Dockerfile은 Docker 이미지를 정의하는 텍스트 파일입니다. 이 파일을 사용하여 일관성 있게 이미지를 빌드할 수 있습니다.

    • 예시 Dockerfile:

      # 기본 이미지
      FROM ubuntu:20.04
      
      # 패키지 설치
      RUN apt-get update && apt-get install -y nginx
      
      # 파일 복사
      COPY ./index.html /var/www/html/
      
      # 컨테이너 실행 시 nginx 시작
      CMD ["nginx", "-g", "daemon off;"]
    • 빌드 명령어:

      • docker build -t mynginx .: 현재 디렉터리에서 Dockerfile을 사용해 이미지를 빌드하고, mynginx라는 태그를 붙입니다.

4. 컨테이너 백업 및 복원

  • 컨테이너 상태 저장:
    • docker commit: 실행 중인 컨테이너의 상태를 이미지로 저장할 수 있습니다.
      docker commit container_id my_image_name
      • 이 명령어는 실행 중인 컨테이너를 이미지로 변환합니다.
  • 컨테이너 데이터 백업:
    • 데이터베이스와 같은 중요한 데이터를 백업하는 방법을 다룰 수 있습니다. 예를 들어, MySQL 컨테이너의 데이터를 백업하려면:
      docker exec mydb_container mysqldump -u root -p mydatabase > backup.sql
  • 컨테이너 파일 시스템 백업:
    • docker export를 사용하여 컨테이너의 파일 시스템을 tar 아카이브로 내보낼 수 있습니다.
      docker export container_id > container_backup.tar
  • 컨테이너 복원:
    • 백업한 tar 파일을 사용하여 새로운 컨테이너로 복원할 수 있습니다:
      docker import container_backup.tar

5. Docker 이미지 백업 및 복원

  • 이미지 백업:
    • docker save 명령어를 사용하여 이미지를 tar 파일로 저장할 수 있습니다:
      docker save -o my_image.tar my_image_name
    • 이 tar 파일을 다른 시스템으로 전송하거나 아카이브할 수 있습니다.
  • 이미지 복원:
    • docker load 명령어를 사용하여 tar 파일에서 이미지를 복원할 수 있습니다:
      docker load -i my_image.tar

6. 이미지와 컨테이너의 차이점

  • 이미지: Docker 이미지는 실행에 필요한 모든 파일을 포함하는 읽기 전용 템플릿입니다.
  • 컨테이너: 컨테이너는 이미지를 기반으로 실행되는 실제 환경으로, 읽기/쓰기가 가능한 공간을 가지고 있습니다. 즉, 이미지는 "템플릿"이고, 컨테이너는 "실행 중인 인스턴스"입니다.
  • 상태: 이미지는 변경할 수 없지만, 컨테이너는 실행 중에 파일 시스템을 수정할 수 있습니다.

7. Docker의 효율적인 백업 및 복원 전략

  • 정기적인 백업 자동화:
    • 백업을 자동화하려면 cron 작업을 사용하여 주기적으로 데이터를 백업할 수 있습니다. 예를 들어, Docker 컨테이너의 데이터를 매일 백업하려면 cron job을 설정합니다.
    • 예시 스크립트:
      0 2 * * * docker exec mydb_container mysqldump -u root -p mydatabase > /backups/backup_$(date +\%F).sql
  • 분산 환경에서의 이미지 백업:
    • 여러 Docker 노드에서 동일한 이미지를 백업해야 할 경우, Docker Registry를 활용하여 이미지를 중앙 집중식으로 관리하고, 필요시 이미지를 가져올 수 있습니다.
728x90

'개발 > Docker' 카테고리의 다른 글

Docker GitLab root 패스워드 변경  (0) 2025.11.05