Post

Docker로 PostgreSQL 실행하기

1. Docker 설치

Docker 설치가 안 되어 있다면, Docker는 공식 웹사이트를 참고하여 설치

2. PostgreSQL 이미지 가져오기

Docker 이미지: 컨테이너를 생성하기 위한 설계도
Docker Hub: 다양한 이미지를 제공하는 공식 저장소

Docker Hub에서 공식 PostgreSQL 이미지를 가져오기

1
docker pull postgres

3. Docker 컨테이너 생성

Docker 컨테이너: Docker 이미지를 기반으로 실행되는 가상화된 환경
두가지 방법이 있다

  • PostgreSQL 이미지에서 바로 생성
  • Dockerfile을 통해서 생성

3.1. PostgreSQL 이미지에서 바로 생성

1
docker run --name postgres_db -e POSTGRES_PASSWORD=mysecretpassword -d postgres

3.2. Dockerfile을 통해서 생성

Dockerfile 생성

1
2
3
4
5
6
7
8
9
10
11
12
13
# Use the official PostgreSQL image from Docker Hub
FROM postgres:latest

# Set environment variables
ENV POSTGRES_USER=myuser
ENV POSTGRES_PASSWORD=mypassword
ENV POSTGRES_DB=mydatabase

# Copy initialization scripts to be executed when container starts
COPY init.sql /docker-entrypoint-initdb.d/

# Expose PostgreSQL port
EXPOSE 5432

init.sql 생성

1
2
3
4
5
CREATE TABLE IF NOT EXISTS users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);

Docker 이미지 빌드

1
docker build -t my-postgres-image .

Docker 컨테이너 실행

1
docker run --name postgres_db -d -p 5432:5432 my-postgres-image

4. 컨테이너 상태 확인

1
docker ps

5. 컨테이너 내부에 들어가기

PostgreSQL 이미지에서 바로 생성했을 경우

1
docker exec -it postgres_db psql -U postgres

Dockerfile을 통해서 생성

1
docker exec -it postgres_db psql -U myuser mydatabase

6. PostgreSQL 사용

PostgreSQL 이미지에서 바로 생성했을 경우

1
2
3
4
5
6
7
CREATE DATABASE mydatabase;

CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE
);

데이터 입력

1
2
3
4
INSERT INTO users (username, email) VALUES 
('user1', 'user1@example.com'),
('user2', 'user2@example.com'),
('user3', 'user3@example.com');

7. 컨테이너 중지 및 삭제

컨테이너 중지

1
docker stop postgres_db

컨테이너 삭제

1
docker rm postgres_db
This post is licensed under CC BY 4.0 by the author.