일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- element.style
- JWT
- N+1문제
- N+1
- JWT 쓰는 방법
- 네비게이션 한번에
- .env
- 이미지가 포함된 게시글
- 알림생성모듈
- 메뉴바
- JWT 쓰는이유
- 부트캠프
- 게시글 이미지
- getComputedStyle
- Winston
- 토큰
- route 53
- 스테이지어스
- 레포지토리
- 게시글 이미지 업로드
- 알림생성
- JSON Web Token
- secret코드
- 패스파라미터
- 환경변수
- 쿼리스트링
- 3계층구조
- 메뉴바 한번에
- unnest
- 포트번호
- Today
- Total
기주
[docker] docker로 psql DB 컨테이너 버전관리하기 본문
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=[비밀번호] [이미지명]:[태그명]
장점
이미지를 멀티 아키텍처로 만들 수 있다
단점
추가작업이 필요하다
'devops > docker' 카테고리의 다른 글
[AWS] AWS ECR을 활용해서 EC2에서 도커로 배포하기-1 (1) | 2024.12.08 |
---|---|
[docker] docker compose로 nestJS, postgresql, redis 서버 띄우기 (0) | 2024.12.07 |
[docker] docker compose 로 mysql 서버 띄우기 (0) | 2024.12.07 |
[docker] docker로 nestJS 서버띄워보기 (0) | 2024.12.07 |
[docker] 도커파일 만들기1 (0) | 2024.12.07 |