[docker] 사용했던 container의 postgres데이터도 같이 push 하기(push container with using data of postgres)

2022. 12. 27. 16:39docker

도커 환경에서 작업하다가 다른 컴퓨터로 데이터를 옮겨야할 일이 생겼다.

문제는 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 툴에서 확인해보면 데이터 이식(?)이 잘 되어있는 것을 확인할 수 있다.