기주

[docker] docker로 psql DB 컨테이너 버전관리하기 본문

devops/docker

[docker] docker로 psql DB 컨테이너 버전관리하기

기주그지마 2025. 1. 16. 17:24

 

docker로 psql DB 컨테이너 버전관리하기

 

도커 컨테이너는 언제든지 사라질 수 있다.

 

도커 컨테이너를 보존하기위해서는 주기적으로 이를 이미지로 만들어놓고 도커허브나 AWS ECR에 저장해두는 것이 중요하다. 깃허브처럼 도커 이미지도 클라우드에 저장해두는 것이 안전하고 간단하다. 도커 이미지가 있다면 어디서든 이미지를 다운받아 컨테이너를 실행할 수 있다. 도커 이미지로 인해서 배포과정도 아주 간단하게 진행할 수 있다.

 

이때 DB 컨테이너의 데이터를 볼륨에 저장하고 있다면 데이터를 호스트 컴퓨터에 저장하고 있는 것이다. 도커 커밋으로 이미지를 만든다면 컨테이너 내의 데이터만 이미지로 커밋되기 때문에 DB에서 이미지를 컨테이너로 다시 만들어도 데이터는 복구되지 않는 것을 확인 할 수 있다.

 

데이터까지 포함하여 db 컨테이너를 관리하기위해서는 컨테이너 내부에 백업파일을 만들어놓고 이를 이미지로 만들면 된다. 그렇다면 다른 환경에서 이미지를 내려받아 컨테이너를 생성할때 DB 데이터를 쉽게 복구할 수 있다.

 

 

 

 

 

 

 

 

1. docker commit 으로 컨테이너 관리하기

docker commit

-> 현재 도커 "컨테이너만"을 이미지화 하는 것.

 

 

 

1. /pg_dump/postgres-db-dump-1.0.1.sql 에 pg_dumpall로 백업해두기

 

2. 도커 컨테이너 -> 이미지로 저장하기

docker commit [컨테이너명/ID] [이미지이름]:[태그명]

 

3. 도커허브( or ECR) 에 도커 푸시

 

 

장점

실행중인 컨테이너로 이미지를 바로 만들 수 있다.

 

단점

docker commit 으로 이미지 생성시 현재 플랫폼(cpu 아키텍처) 기반으로 이미지가 생성되기 때문에 다른 플랫폼에서 이를 실행할 경우 성능이슈가 생기거나 실행이 안될 수도 있다.

 

 

 

 

 

 

 

 

 

 

 

2. 도커 파일로 build하여 이미지 생성하기

 

1. pg_dumpall로 psql 데이터를 .sql 파일로 백업해두기 (postgres-db-dump-1.0.2.sql)

 

2. postgres-db-dump-1.0.2.sql 파일 수정하기

postgres 계정 생성부분 삭제

postgres가 자동으로 생성되어있어서 데이터 복원시 에러가 발생한다.

CREATE ROLE postgres;
ALTER ROLE ~~

 

3. docker file 작성하기

/docker-entrypoint-initdb.d 폴더에 .sql파일을 저장하여 도커 컨테이너 첫 실행시 이 파일이 자동으로 실행되도록 한다.

FROM postgres:16.4

COPY ./postgres-db-dump-1.0.2.sql ./docker-entrypoint-initdb.d/init.sql

 

 

4. docker build로 복원

buildx build --platform linux/amd64, linux/arm64로 이미지를 멀티 아키텍처 형태로 빌드했음.

이제 도커 이미지 pull할 때 자동으로 로컬컴퓨터의 cpu아키텍처에 따라 맞는 이미지를 다운받는다.

docker buildx build --platform linux/amd64,linux/arm64 -t postgres-db:1.0.2 .

 

 

5. 푸시

 

6. 컨테이너 실행

컨테이너 실행시 자동으로 dump 파일로 데이터가 복구된다

docker run -d -p [호스트 포트]:[컨테이너 포트] --name [컨테이너이름] -e POSTGRES_PASSWORD=[비밀번호] [이미지명]:[태그명]

 

 

 

장점

이미지를 멀티 아키텍처로 만들 수 있다

 

단점

추가작업이 필요하다