개요
호스트 서버에 실제 데이터베이스를 설치하지 않고 도커로 구동하기 위해 PostgreSQL 도커 이미지를 받아와 컨테이너를 생성하였다.
컨테이너가 삭제되더라고 데이터는 영구적으로 저장하기 위해서 volumes를 mount하여 호스트 시스템의 지정된 디렉토리와 컨테이너 내부의 데이터 저장 경로를 연결하였다.
Docker image pull 받기
docker hub에서 postgres docker image를 가져온다.
도커 이미지는 도커 컨테이너 생성을 위한 명령어가 적혀있는 템플릿이다. 이미지에는 어플리케이션을 실행하는데 필요한 코드,라이브러리,config file들이 포함되어 있다.
docker pull postgres 명령어를 CLI 에 입력을 한다. 이렇게 하면 최신 버전의 docker image를 가져오게 된다.
docker images -a 로 다운받은 이미지를 확인한다.
Volumes 만들기
docker volume create [options] [volume name]
을 입력해 도커 볼륨을 생성해준다.
도커 볼륨은 이름을 지정하지 않으면 랜덤으로 생성이된다.
그 다음 로컬 디렉터리를 생성한다. 도커 컨테이너 내부의 데이터를 호스트 시스템의 특정 디렉터리에 영구적으로 저장하기 위해서 이 방법을 사용하였다.
Docker Container 만들기
만든 로컬 디렉터리 (여기서는 postgres_datapart)를 컨테이너 볼륨이랑 매핑을 시켜준다 ( -v 볼륨이름:컨테이너내경로 )
$ docker run -d \
--name some-postgres \
-e POSTGRES_PASSWORD=amdin2 \
-e POSTGRES_USER=admin2 \
-e POSTGRES_DB=my_db \
-v postgres_datapart:/var/lib/postgresql/data \
-p 8085:5432 \
postgres
잘 생성되었는지 docker ps 명령어를 통해 확인한다.
확인하기
볼륨이 잘 설정이 되었나 확인하기 위해 컨테이너 세부 정보를 확인하는 명령어를 통해 확인한다.
docker inspect [container name]
name은 볼륨의 이름이고 source는 볼륨의 실제 위치를 나타낸다.
RW는 볼륨의 읽기/쓰기 가능 여부이다. true로 설정되어 있으므로, 이 볼륨은 읽기와 쓰기가 모두 가능하다.
그 외에도 도커 사용자나 설정된 이름에 맞는 데이터베이스가 잘 생성이 되었는지 확인하기위해 도커 컨테이너 내부에 접속한다.
docker exec -it [container name] /bin/bash
명령어로 내부에 접속한다.
psql - U [user name ] [DB name]
를 입력하여 입력된 user name 사용자로 전환하여 PostgreSQL 데이터베이스에 로그인한다.
psql은 PostgreSQL 데이터베이스와 상호작용하기 위한 커맨드라인 툴이다.
\du를 입력해 데이터베이스 user 목록을 조회한다.
docker compse 작성하기
기존에 생성했던 컨테이너 정보를 그대로 사용하기 위해 기존 컨테이너는 삭제하고 docker compose에 그대로 작성해 컨테이너 생성하여 관리해주는 것으로 한다.
근데 기존에 생성한 외부 볼륨을 그대로 사용하고 싶기에 맨 아래에 external: true 를 추가해주었다.
services:
db:
ports:
- 8085:5432
container_name: some_postgres
image: postgres
environment:
POSTGRES_DB: my_db
POSTGRES_USER: admin2
POSTGRES_PASSWORD: admin2
volumes:
-{생성한 디렉터리 경로 넣기}:/var/lib/postgresql/data
restart: always
volumes:
pgdata:
external: true
name: {도커 볼륨 이름}
docker-compose 실행하기
docker compose -f ./docker-compose.yml up 명령어를 CLI에 입력하면 실행이 된다.
docker desktop을 설치했으면 따로 docker compose를 install할 필요가 없다.
docker-compose.yml에 여러가지 컨테이너가 있는데 특정 컨테이너만 실행시키고 싶으면
docker compose up -d [service name] 이런식으로 사용하면 된다.
'클라우드 > Docker' 카테고리의 다른 글
no space left on device 해결 (0) | 2024.03.20 |
---|---|
JAVA,Python 애플리케이션을 도커파일로 만들고 도커 컴포즈로 관리하기 (0) | 2024.02.16 |
도커 컨테이너 커밋 & 포트 바인딩 (0) | 2023.05.01 |