안녕하세요. 글쓰는 개발자 입니다.
목차
1. 개발 환경
2. postgreSQL Docker Container 실행
docker pull postgres:14.7
docker run \
-d \
--name <container-name> \
--restart always \
-e POSTGRES_PASSWORD=<user postgress password> \
-v ${PWD}/postgres-docker:/var/lib/postgresql/data \
-p 5432:5432 postgres:14.7
* -v : volume의 경우 앞의 ${PWD} 는 명령을 실행하고 있는 위치를 나타냅니다. ${HOME} 또는 본인이 원하는 절대 경로를 입력하시면 됩니다.
3. DB 생성
구글링을 하다보면, psql 을 사용하는 예제가 많이 있습니다. 저는 편하게 사용하기 위해서 DBeaver 를 사용했습니다.
1) DBeaver의 connection 에서 Host 주소와 ID / PW 를 입력하고 접속
2) Database 생성
3) Table 생성
4. postgres backup
1) postgresql 백업 쉘스크립트 (postgres_backup.sh) 작성
# /workspace
mkdir postgres_backups # backup sql script 를 저장하는 장소
mkdir script # crontab log 를 저장하는 장소
touch postgres_backup.sh
vi postgres_backup.sh
############## vi postgres_backup.sh ###########
#!/bin/bash
BACKUP_DIR="/workspace/postgres_backups/"
FILE_NAME=$BACKUP_DIR`date +%y%m%d-%H%M%S`.sql
docker exec -t <container_name> pg_dump -U <dbuser> <db-name> > FILENAME
2) User 에게 docker 권한 부여
sudo usermod -aG docker $USER
3) Cron
postgresql Container 의 TimeZone을 Asia/Seoul로 세팅하고 crontab에 작성한 postgres_backup.sh 를 매일 새벽 1시에 주기적으로 실행하도록 합니다. 또한 crontab 실행 log 를 앞에서 생성한 script 디렉토리 하위에 postgres_backup.sh.log 라는 이름으로 생성하도록 합니다.
ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime # TimeZone 세팅
crontab -e
# m h dom mon dow command
0 1 * * * sh /workspace/postgres_backup.sh >> /workspace/script/postgres_backup.sh.log 2>&1
5. postgres restore
문제가 생겨 database 를 사용하게 될 수 없게 된 경우, 생성한 sql script 를 사용해 restore 합니다.
#/workspace/postgres_backups/
# psql -U <dbuser> --dbname <dbname> -f <backup sql script path>
psql -U postgres --dbanme test -f /var/lib/postgres/data/test.sql
6. <부록> docker network 활용 container 통신
docker compose 를 사용해 보신 분들은 container 간 통신에서 container name 만으로 편리하게 통신이 가능한 것을 확인 하셨을 것입니다. 사실, docker compose 를 사용하면 menifest에 명시된 container들은 하나의 bridge network로 연결되고 이를 통해 container name으로 통신이 가능한 것 입니다.
그렇다면 docker compose 를 사용하지 않았을 때는 어떻게 하면 좋을까요? docker network 를 생성하여 container를 추가하는 방법으로 해결합니다. 아래 명령어를 참고하세요.
# docker network create <network-name>
docker network create test-network
# docker network connect <network-name> <container-name>
docker network connect test-network postgresql
# network 연결 확인
# docker network inspect <network-name>
docker network inspect test-network
'Backend' 카테고리의 다른 글
solved! windows python pre-commit error (0) | 2023.02.16 |
---|---|
python pre-commit Git Hook / flake8 / pytest / PEP8, python pre-commit python path error (0) | 2023.02.15 |