이 글은 [2024 NEW] 개발자를 위한 쉬운 도커 강의를 듣고 작성한 글입니다! 모든 강의자료 이미지 출처는 해당 강사님께 있습니다.
Postgres는 nginx처럼 이미지에 소프트웨어가 포함되어 있기 때문에 별도의 설정 없이 Postgres의 이미지만 실행해도 데이터베이스를 사용할 수 있다. 기본 이미지에는 아무 데이터도 없기 때문에 초기 데이터를 작성하여 Postgres에 전달해야 한다.
실습 명령어 (cp 명령어를 사용하면 컨테이너로 특정 파일을 복사할 수 있다.)
- docker cp 원본 위치 복사될 위치 : 컨테이너와 호스트 머신 간 파일 복사
- docker cp 컨테이너명:원본 위치 복사될 위치 : 컨테이너에서 호스트 머신으로 파일 복사
- docker cp 원본위치 컨테이너명:복사위치 : 호스트 머신에서 컨테이너로 파일 복사
Dockerfile을 사용하지 않고 직접 구성하기
두 개의 터미널을 사용한다.
(터미널1) 기본 postgres:13 이미지를 사용해 컨테이너를 실행한다.
docker run --name postgres -e POSTGRES_PASSWORD=password postgres:13
(터미널1) postgres 컨테이너의 shell에 접속한다.
docker exec -it postgres bin/bash
(터미널1) 내부 파일 시스템을 확인한다.
ls
(터미널1) postgres:13 이미지의 기본 설정 파일을 확인한다.
cat /var/lib/postgresql/data/postgresql.conf
(터미널1) 이 폴더에 sql문이 있을 경우 컨테이너 실행 시 자동으로 sql을 실행하도록 한다.
ls -al /docker-entrypoint-initdb.d/
(터미널2) 실행중인 컨테이너를 확인한다.
docker ps
(터미널2) 호스트 머신의 conf 파일을 postgres 컨테이너로 복사한다.
docker cp ./config/postgresql.conf postgres:etc/postgresql/custom.conf
(터미널1) 컨테이너 내부로 파일이 잘 복사되었는지 확인한다.
cat /etc/postgresql/custom.conf
(터미널2) 호스트 머신의 sql 파일을 postgres 컨테이너로 복사한다.
docker cp ./init.sql postgres:docker-entrypoint-initdb.d
(터미널1) sql문이 컨테이너로 잘 복사된 것을 확인한다.
ls /docker-entrypoint-initdb.d/
(터미널1) sql 파일을 실행하기 전이라서 아무 데이터도 없는 것을 볼 수 있다.
psql -U postgres -c "/d"
(터미널1) 초기 데이터가 구성된 sql 파일을 실행한다.
psql -U postgres -f /docker-entrypoint-initdb.d/init.sql
(터미널1) 테이블이 생성된 것을 확인한다.
psql -U postgres -c "/d"
(터미널1) 컨테이너로 나온다.
exit
(터미널1) postgres 컨테이너를 삭제한다.
docker rm -f postgres
Dockerfile을 사용하여 이미지 빌드하기
leafy-postgres의 Dockerfile이 있는 경로에서 진행한다.
Dockerfile은 다음과 같이 작성한다.
#PostgreSQL 13 버전을 베이스 이미지로 사용
FROM postgres:13
#/docker-entrypoint-initdb.d/에 있는 sql문은 컨테이너가 처음 실행 시 자동실행됨
COPY ./init/init.sql /docker-entrypoint-initdb.d/
#기본 설정 파일을 덮어쓰기하여 새로운 설정 적용
COPY ./config/postgresql.conf /etc/postgresql/custom.conf
#계정정보 설정
ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword
ENV POSTGRES_DB=mydb
EXPOSE 5432
CMD ["postgres", "-c", "config_file=/etc/postgresql/custom.conf"]
leafy-network가 생성되어 있는지 확인한다. leafy-network가 없다면 docker network create leafy-network 로 컨테이너 구성에 사용될 네트워크를 생성한다.
docker network ls
Dockerfile을 사용해 postgres 이미지를 빌드한다.
docker build -t kms02171/leafy-postgres:1.0.0 .
빌드한 이미지를 push한다.
docker push kms02171/leafy-postgres:1.0.0
빌드한 이미지를 사용해 leafy-postgres 컨테이너를 실행한다.
docker run -d --name leafy-postgres --network leafy-network kms02171/leafy-postgres:1.0.0
leafy-postgres 컨테이너의 로그를 확인한다.
docker logs leafy-postgres
leafy-postgres 컨테이너 내에서 명령어 실행 후 결과를 출력한다. postgres의 터미널로 접근이 가능하다.
docker exec -it leafy-postgres su postgres bash -c "psql --username=myuser --dbname=mydb"
exit으로 나온다.
exit
이미지 히스토리를 조회할 수 있다.
docker image history kms02171/leafy-postgres:1.0.0
'Docker' 카테고리의 다른 글
SpringBoot 백엔드 컨테이너 구성 (0) | 2024.03.02 |
---|---|
Leafy 애플리케이션 구성 (0) | 2024.02.29 |
클라우드 네이티브 애플리케이션 (0) | 2024.02.27 |
멀티 스테이지 빌드 (0) | 2024.02.27 |
Dockerfile 지시어 (1) | 2024.02.27 |