Docker

Docker 컨테이너 이전 (데이터 포함)

기억보다는 기록을... 2025. 1. 19. 13:58

docker1에서 운영중인 grafana를 docker2로 이전

# docker ps
CONTAINER ID   IMAGE                                        NAMES
166e84bb9f69   grafana/grafana:11.4.0                       grafana
7fc5b78a34f4   zabbix/zabbix-web-nginx-pgsql:ubuntu-7.0.6   zabbix-web-nginx-pgsql

 

1. 현재 컨테이너(docker1/grafana) 데이터 백업

  • 그라파나 컨테이너(166e84bb9f69)의 데이터 볼륨을 신규 컨터이너에 연결하여 데이터 백업 진행
# docker run --rm --volumes-from 1d58b9f91a6d -v $(pwd):/backup ubuntu tar cvf /backup/grafana-data.tar /var/lib/grafana

 

더보기

docker run --rm

  • 새로운 Docker 컨테이터를 실행하고, 컨테이터가 실행을 마친 후 자동으로 삭제되도록 설정.

--volumes-from 1d58b9f91a6d

  • 운영중인 그라파타 컨테이너(166e84bb9f69)의 볼륨을 신규로 생성한 컨테이너에 마운트
  • 그라파나 데이터가 담긴 볼륨 /var/lib/grafana 디렉토리를 백업하기 위해 연결

-v $(pwd):/backup

  • 현재 작업 디렉토리($(pwd))를 컨테이너 내 /backup 경로로 마운트

ubuntu

  • 사용할 Docker 이미지를 지정(Ubuntu 기반 리눅스 이미지 사용)

 tar cvf /backup/grafana-data.tar /var/lib/grafana

  • tar 명령을 사용하여 /var/lib/grafana 디렉토리를 /backup/grafana-data.tar로 백업

 

 

2. 현재 컨테이너(docker1/grafana) 이미지 저장

# docker save -o grafana-image.tar grafana/grafana:11.4.0

 

 

3. 백업 파일을 신규 서버(docker2)로 전송

# scp grafana* dockeruser@docker2:/home/dockeruser
dockeruser@docker2's password:
grafana-data.tar			100%   45MB  94.7MB/s   00:00
grafana-image.tar			100%  471MB 170.8MB/s   00:02

 


 

4. 신규 서버(docker2) Docker 이미지 로드

# docker load -i grafana-image.tar
75654b8eeebd: Loading layer [===================================>]  8.082MB/8.082MB
0d71f8713fe9: Loading layer [===================================>]   2.56kB/2.56kB
bb89f77ca0aa: Loading layer [===================================>]    8.6MB/8.6MB
089d3485f173: Loading layer [===================================>]  9.686MB/9.686MB
0f54ec253647: Loading layer [===================================>]    194kB/194kB
4f0ca27028f6: Loading layer [===================================>]  104.4kB/104.4kB
bd7eb6dcf452: Loading layer [===================================>]  233.1MB/233.1MB
3dd8d3723003: Loading layer [===================================>]  233.6MB/233.6MB
81506b4598f7: Loading layer [===================================>]  37.89kB/37.89kB
568368e59dae: Loading layer [===================================>]   5.12kB/5.12kB
Loaded image: grafana/grafana:11.4.0

 

 

5. 신규 서버(docker2) 데이터 복원

  • 볼륨 생성 -> 권한 부여 -> 데이터 복원
# docker volume create grafana-storage
grafana-storage

# chmod -R 777 /var/lib/docker/volumes/grafana-storage/_data

# docker run --rm -v grafana-storage:/var/lib/grafana -v $(pwd):/backup ubuntu tar xvf /backup/grafana-data.tar -C /var/lib/grafana --strip-components=3

 

더보기

--strip-components=3

  • 아카이브 파일 경오에서 상위 3개 디렉토리를 제거하고 이후 파일들만 복원
  • 복원 파일은 /var/lib/grafana 아래에 저장
  • 백업 파일 구조
    • /var/lib/grafana/grafana.db
    • /var/lib/grafana/plugins/
    • /var/lib/grafana/dashboards/

그라파나 데이터 경로가 /var/lib/grafana로 생성이 되어 있어서,

복원 대상에서 /var/lib/grafana를 제거하지 않을 경우 /var/lib/grafana/var/lib/grafana 아래로 복원 됨(경로중복)

 

  • 복원 데이터 확인 (grafana.db 가 포함되어 있어야 됨)
# docker run --rm -v grafana-storage:/var/lib/grafana ubuntu ls /var/lib/grafana
csv
grafana.db
pdf
plugins
png

 

 

6. 신규 서버(docker2) 컨테이너 실행

# docker run -d --name grafana \
  -e TZ=Asia/Seoul \
  -p 3000:3000 \
  -v grafana-storage:/var/lib/grafana \
  --restart unless-stopped \
  grafana/grafana:11.4.0
f1cb679639c19e6c720d5db7aa48de94659bd13d883875a2892a9153f788d89d

# docker ps
CONTAINER ID   IMAGE	NAMES
f1cb679639c1   grafana/grafana:11.4.0	grafana

 

 

 

7. 서비스 확인

  • 접속 정보는 기존에 설정값 사용(초기 admin/admin 아님)
  • 모니터링 항목, Alert 설정 등 확인