- Published on
Docker Compose로 PostgreSQL 구성하기
- Authors
- Name
- 신주용
도커 컴포즈를 이용해 PostgreSQL 서버를 구성해봅니다.
docker-compose.yml
파일 생성- #5: postgres 도커 공식 이미지1를 사용합니다.
image: image_name:tag
에서 태그 버전을 명시하지 않으면latest
버전 이미지를 가져옵니다. - #7:
[외부 포트]:[컨테이너 내부 포트]
형식으로 포트를 매핑합니다.- DB 데이터는 중요한 자산입니다. 방화벽, 게이트웨이 등 다른 조치를 취하는 것이 보안적으로 좋지만 이 글의 범위를 벗어나므로 여기서는 간단히 기본 포트 대신 다른 포트로 변경하여 사용합니다.
아니 그럴거면 일단 비밀번호부터 바꾸지
- DB 데이터는 중요한 자산입니다. 방화벽, 게이트웨이 등 다른 조치를 취하는 것이 보안적으로 좋지만 이 글의 범위를 벗어나므로 여기서는 간단히 기본 포트 대신 다른 포트로 변경하여 사용합니다.
- #9-11: 환경 변수를 설정합니다.
- #13: 컨테이너를 초기화할 때 사용합니다.
[외부 경로]:[내부 경로]
형식입니다.
- #5: postgres 도커 공식 이미지1를 사용합니다.
컨테이너 생성 시 실행할 SQL 설정
컴포즈 파일의 #13 줄을 조금 더 자세히 봅시다.
- 도커는 컨테이너가 최초 실행될 때 한 번,
/docker-entrypoint-initdb.d/
폴더 안에 있는*.sql
,*.sql.gz
,*.sh
파일을 실행합니다. 그러므로 초기화 코드를 만들고, 그 파일 또는 폴더를 컨테이너 내부의/docker-entrypoint-initdb.d/
폴더에 넣어서 원하는 대로 초기화를 할 수 있습니다.
init.sql
파일을 이렇게 만들어 봤습니다. 이제 postgres 컨테이너를 처음 만들 때 이 sql이 실행될 것입니다. 그러면 테이블이 생성되고, 홍길동이라는 이름을 가진 행이 추가될 것입니다. 그런데 제대로 생성되었는지 어떻게 확인할까요?
- 도커는 컨테이너가 최초 실행될 때 한 번,
pgAdmin 사용법
pgAdmin
이라는 PostgreSQL 전용 오픈 소스 관리 툴이 있습니다. 이 툴도 역시 도커를 사용해 구축할 수 있습니다. pgAdmin 공식 문서2를 보고 따라해 봅시다. yml 파일 예시는 본문 상단의docker-compose.yml
파일 #16~24 줄을 참고합니다.#17: 이미지는
dpage/pgadmin4
3를 사용합니다.#19: pgAdmin은 기본적으로 80번 포트를 사용하는데, 편의상, 보안상 외부 포트를 바꿔서 사용하기 위해 포트 매핑을 해줍니다.
#21, 22: pgAdmin에서 사용 가능한 환경 변수 중 이메일과 비밀번호는 필수 항목입니다.
docker-compose up -d --build
명령어로 실행한 후, http://localhost:54330 으로 접속해봅니다. 환경 변수로 설정한 이메일과 비밀번호를 입력하면 됩니다.새 서버 추가를 선택합니다.
서버 이름을 입력합니다. pgadmin에 보일 이름이므로 원하는 이름 입력하면 됩니다.
연결 설정에는
docker-compose.yml
파일에 입력했던 내용을 사용합니다.- 호스트 이름에는 #4 줄에 입력한 서비스 이름을 입력합니다.
- 포트 번호는 #7 줄의 내부 포트를 입력합니다.
- 접속 데이터 베이스는 #11, 사용자 이름은 #9, 비밀번호는 #10을 입력합니다.
- 입력 후 아래 '저장' 버튼을 누르면 됩니다.
연결 된 후, 왼쪽 탐색기에서 Servers > [서버 이름] > 데이터베이스 > [데이터베이스 이름] > 스키마 > public > 테이블 > [테이블 이름]을 선택합니다. (이 구조는 조금 다를 수 있습니다.)
선택한 후 '탐색기'와 '대시보드' 사이의 네 아이콘 중 왼쪽에서 두 번째 'View Data' 버튼을 누르면 해당 테이블의 내용이 보입니다. '홍길동'도 잘 들어가 있는 것을 볼 수 있습니다.
전체 소스코드는 GitHub repository에서 확인할 수 있습니다.
Footnotes
"postgres". hub.docker.com. https://hub.docker.com/_/postgres (accessed Mar. 7, 2021). ↩
"Container Deployment". www.pgadmin.org. https://www.pgadmin.org/docs/pgadmin4/5.0/container_deployment.html (accessed Mar. 7, 2021). ↩
"dpage/pgadmin4". hub.docker.com. https://hub.docker.com/r/dpage/pgadmin4/ (accessed Mar. 7, 2021). ↩