2022. 12. 27. 16:39ㆍdocker
도커 환경에서 작업하다가 다른 컴퓨터로 데이터를 옮겨야할 일이 생겼다.
문제는 postgres 기본 환경은 옮겨지지만 내가 작업한 user와 database는 옮겨지지가 않았다...
PGDATA 사용법도 잘 모르겠어서 며칠을 하다가 포기했었지만 postgres의 dump를 활용하여 데이터를 옮길 수 있었다.
백업한 파일을 함께 commit해서 push 하고 다른 컴퓨터에서 pull 한 다음 백업한 파일을 복원하여 사용하는 방법이다.
실행하고 있는 도커의 터미널에 들어가서
# su postgres
하여 postgres에 접근한다.
그리고 볼륨 파일에 접근한다.
/cd /var/lib/postgresql/data
그리고 아래의 명령어를 입력하여 백업파일을 생성하자.
pg_dump -U 소유주 db명 > 백업파일명.sql
나의 경우는 이러했다. (소유주: edu, 데이터베이스: edudb)
pg_dump -U edu edudb > postgres_edudb_bak2.sql
그러면 이렇게 백업 파일이 만들어진 것을 확인할 수 있다.

이제 이 파일을 밖으로 빼보자
mv postgres_edudb_bak2.sql ..
잘 빠져나와 있다.

이제 터미널로 나와서 이 컨테이너를 저장(commit)하여 줄 것이다.
#docker commit 컨테이너이름 이미지이름/태그
# 이미지이름/태그는 docker hub의 repository의 이름과 동일해야 한다.
docker commit tuffhr4 tuffhr4/e4edu
docker desktop에 잘 upload된 이 이미지를 "Push to Hub"를 클릭하여 docker hub repository에 업로드하자.

그리고 다른 컴퓨터에서 똑같이 도커 데스크탑에 로그인 한 다음에 Images-REMOTE REPOSITORIES
에서 가장 최근 버전을 PULL 하자.

pull 한 이미지를 run할 것이다.

Volumes의 Container path만 신경써서 내가 사용했던 컨테이너의 volume이 있던 경로로
꼭
잘 설정해주자.
실행 중인 이미지 컨테이너의 terminal을 열어서,
su postgres
psql
을 실행하여 포스트그레스에 접속하고,
이전 컴퓨터에서 사용하던 사용자와 db를 만들고
postgres에서 나온다.
# CREATE USER 사용자 및 소유주 이름 WITH PASSWORD '비밀번호' superuser;
CREATE USER edu WITH PASSWORD 'edu' superuser;
# create database 데이터베이스이름
create database edudb
exit
볼륨 파일이 있는 곳으로 가서, 백업 파일을 확인하고
cd /var/lib/postgresql

내가 새로운 컴퓨터에서 만든 데이터 베이스에 복원한다.
# psql 데이터베이스이름 < 백업파일
psql edudb < postgres_edudb_bak2.sql
Dbeaver 등 db 툴에서 확인해보면 데이터 이식(?)이 잘 되어있는 것을 확인할 수 있다.
