안녕하세요 펭귄 교수입니다.
도커를 사용하여 애플리케이션을 배포하고 관리할 때, 중요한 데이터를 안전하게 유지하고 복원하는 것은 매우 중요합니다. 컨
테이너는 일시적인 성격을 가지고 있기 때문에, 컨테이너 내부의 데이터나 설정 파일이 사라질 수 있습니다. 이런 상황에 대비하기 위해 컨테이너 백업 및 복원은 필수적인 과정입니다.
이번 글에서는 도커 컨테이너의 데이터를 백업하고, 이를 복원하는 방법을 알아보겠습니다.
1. 도커 컨테이너에서 데이터 저장 방법
도커 컨테이너는 고유의 파일 시스템을 갖추고 있어, 컨테이너 내부에 저장된 데이터는 해당 컨테이너의 수명 주기에 의존하게 됩니다. 즉, 컨테이너가 삭제되면 내부 데이터도 사라집니다. 이를 방지하기 위해 볼륨(Volumes)과 바인드 마운트(Bind Mounts)를 사용하여 데이터를 지속적으로 보관할 수 있습니다.
- 볼륨: 도커에서 관리하는 저장소로, 데이터를 컨테이너 외부에 저장하여 컨테이너가 삭제되어도 데이터를 유지할 수 있습니다.
- 바인드 마운트: 호스트의 파일 시스템을 컨테이너에 마운트하여 데이터를 보존합니다.
볼륨에 관해서는 이전 글에 자세하게 설명하니 참조하시면 되겠습니다.
2. 도커 컨테이너 백업 방법
컨테이너를 백업하려면, 다음과 같은 방식으로 데이터를 추출하고 저장할 수 있습니다.
2-1. 도커 볼륨 백업
컨테이너에서 가장 많이 사용하는 저장 방식인 볼륨을 백업하는 방법은 간단합니다. docker cp 명령어를 사용하여 컨테이너 내부에서 호스트로 파일을 복사하는 방식으로 데이터를 백업할 수 있습니다.
# 볼륨 백업 예시
docker run -d --name mycontainer -v myvolume:/data ubuntu
# 호스트의 경로로 데이터 백업
docker run --rm --volumes-from mycontainer -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /data
위 명령어에서 --volumes-from 옵션은 다른 컨테이너의 볼륨을 마운트하여 백업할 수 있게 해줍니다. tar 명령어를 사용해 데이터를 하나의 파일로 압축하여 백업할 수 있습니다.
2-2. 컨테이너 전체 백업
컨테이너의 파일 시스템 전체를 백업하고 싶다면, docker commit 명령어로 현재 상태의 컨테이너를 이미지로 저장할 수 있습니다.
# 컨테이너 전체 백업(이미지로 저장)
docker commit mycontainer mybackupimag`docker commit`을 사용하면 현재 실행 중인 컨테이너를 이미지로 변환하여 나중에 복원할 수 있습니다.
2-3. 데이터베이스 백업
데이터베이스가 도커 컨테이너에서 실행 중일 경우, 일반적으로 데이터베이스의 덤프를 통해 백업합니다. 예를 들어, MySQL 컨테이너에서 mysqldump 명령어를 사용해 데이터를 백업할 수 있습니다.
# MySQL 데이터베이스 백업
docker exec mymysqlcontainer mysqldump -u root -p mydatabase > backup.sql
이 명령어는 MySQL 컨테이너 내부의 데이터를 backup.sql 파일로 저장합니다. 이후 이 파일을 사용하여 데이터베이스를 복원할 수 있습니다.
3. 도커 컨테이너 복원 방법
백업한 데이터를 복원하는 방법을 알아보겠습니다. 일반적으로 백업한 파일을 다시 컨테이너로 불러오거나, 이미지로 저장한 경우 새로 컨테이너를 생성할 수 있습니다.
3-1. 도커 볼륨 복원
볼륨으로 백업한 데이터를 다시 컨테이너에 복원하는 방법은 다음과 같습니다.
# 볼륨 복원 예시
docker run -d --name newcontainer -v myvolume:/data ubuntu
# 백업 파일에서 데이터 복원
docker run --rm --volumes-from newcontainer -v $(pwd):/backup ubuntu bash -c "cd /data && tar xvf /backup/backup.tar --strip 1"
이 명령어는 백업 파일을 풀어서 새로 생성된 컨테이너의 볼륨에 데이터를 복원합니다.
3-2. 컨테이너 이미지로 복원
이미지로 백업된 컨테이너는 새로운 컨테이너로 쉽게 복원할 수 있습니다. docker run 명령어를 사용해 백업 이미지를 기반으로 컨테이너를 시작하면 됩니다.
# 백업 이미지로 새 컨테이너 실행
docker run -d --name restoredcontainer mybackupimage
이 명령어를 사용하면 백업했던 컨테이너 상태 그대로 복원된 컨테이너를 실행할 수 있습니다.
3-3. 데이터베이스 복원
백업한 데이터베이스 덤프 파일을 다시 데이터베이스 컨테이너에 복원하는 방법은 다음과 같습니다.
# MySQL 데이터베이스 복원
docker exec -i mymysqlcontainer mysql -u root -p mydatabase < backup.sql
이 명령어는 backup.sql 파일의 내용을 데이터베이스에 다시 로드하여 복원하는 역할을 합니다.
4. 도커 컨테이너 백업 및 복원 자동화
도커 컨테이너의 백업 및 복원 작업을 자동화하면, 시스템 관리를 더욱 효율적으로 할 수 있습니다. 이를 위해 셸 스크립트를 사용하거나 크론(cron) 작업을 통해 주기적으로 백업을 설정할 수 있습니다.
4-1. 셸 스크립트로 백업 자동화
다음은 셸 스크립트를 사용하여 주기적으로 도커 볼륨을 백업하는 예시입니다.
#!/bin/bash
# 백업할 볼륨 이름
VOLUME_NAME=myvolume
# 백업 경로 설정
BACKUP_DIR=/backup
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE=$BACKUP_DIR/${VOLUME_NAME}_$TIMESTAMP.tar
# 백업 수행
docker run --rm --volumes-from mycontainer -v $BACKUP_DIR:/backup ubuntu tar cvf $BACKUP_FILE /data
이 스크립트를 사용하면 myvolume 볼륨을 주기적으로 백업할 수 있습니다. 이를 크론 작업으로 등록하여 자동화할 수 있습니다.
4-2. 크론 작업 설정
크론 작업을 사용하면 매일, 매주, 매달 주기적으로 백업 작업을 수행할 수 있습니다.
# 매일 오전 3시에 백업 작업 수행
0 3 * * * /path/to/backup-script.sh
위와 같이 크론 작업을 설정하면, 매일 정해진 시간에 백업 스크립트가 실행되어 데이터를 주기적으로 백업합니다.
5. 도커 백업 및 복원의 베스트 프랙티스
5-1. 정기적인 백업
정기적인 백업은 데이터 손실을 방지하는 중요한 방법입니다. 특히, 중요한 애플리케이션과 데이터를 사용하는 컨테이너는 주기적인 백업이 필수적입니다. 자동화된 스크립트와 크론 작업을 설정해 매일 또는 매주 백업을 수행하는 것이 좋습니다.
5-2. 백업 파일의 보관 및 보안
백업 파일은 중요한 데이터를 포함하고 있기 때문에, 안전한 장소에 저장해야 합니다. 클라우드 스토리지나 외부 하드 드라이브를 사용해 백업 파일을 안전하게 보관하고, 암호화를 통해 백업 파일의 무결성을 보호하는 것도 좋습니다.
5-3. 복원 테스트
정기적으로 복원 테스트를 수행하여 백업된 파일이 정상적으로 작동하는지 확인하는 것이 중요합니다. 복원이 제대로 이루어지지 않으면, 비상 상황에서 백업의 의미가 없어질 수 있습니다. 복원 절차를 문서화하고, 문제가 생겼을 때 신속하게 대응할 수 있는 절차를 마련해야 합니다.
6. 마무리
도커 컨테이너의 백업과 복원은 데이터 유실을 방지하고 시스템의 안정성을 유지하기 위한 중요한 절차입니다.
정기적인 백업과 보안 관리, 그리고 복원 테스트를 통해 신뢰할 수 있는 도커 환경을 유지하는 것이 중요합니다.
도커에서 제공하는 도구와 명령어를 잘 활용하면 복잡한 작업도 손쉽게 처리할 수 있습니다.
'Docker > Docker 강의' 카테고리의 다른 글
[Docker 강의 24편] 도커로 서버리스 환경 구축하기 (0) | 2024.10.08 |
---|---|
[Docker 강의 23편] 도커 스웜(Docker Swarm) 개념 (1) | 2024.10.06 |
[Docker 강의 21편] 도커 이미지 보안 관리 (0) | 2024.10.06 |
[Docker 강의 20편] 도커와 마이크로서비스 아키텍처 (0) | 2024.10.05 |
[Docker 강의 19편] 도커와 쿠버네티스 기본 개념 (1) | 2024.10.05 |