리눅스 가상화 컨테이너. 프로세스들을 격리해서 실행시킬 수 있는 환경을 제공한다.
여러개의 도커 컨테이너들을 한꺼번에 실행하고 관리할 수 있게 해주는 툴. docker-compose.yml 에 필요한 내용을 작성하면 된다.
services:
pg:
image: postgres:13
restart: always
volumes:
- "./postgresql/data:/var/lib/postgresql/data" # 도커 컨테이너가 종료되면 데이터베이스도 사라져 버린다. 컨테이너가 종료돼도 데이터를 보존하기 위해 postgresql/data 폴더에 데이터베이스 데이터들을 저장한다.
- "./init/:/docker-entrypoint-initdb.d/" # init.sql 파일에 데이터베이스 초기 설정값을 작성하면 도커 컴포즈 시에 자동적으로 테이블을 만들어준다.
ports:
- "5432:5432"
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "password"
POSTGRES_DB: "postgres"
TZ: "Asia/Seoul"
node:
image: "node:14"
working_dir: /usr/src/app
environment: # node 환경변수 주입. 따로 .env 파일을 작성할 필요 없이 여기다 환경변수 값들을 셋팅할 수도 있다.
DB_USER: postgres
DB_PWD: password
DB_TYPE: postgres
DB_HOST: pg # 호스트 이름은 services 하의 데이터베이스 이름과 같아야 한다.
DB_PORT: 5432
DB_NAME: postgres
volumes:
- ./src:/usr/src/app
ports:
- "8000:8000"
command: bash -c "npm install && npm start" # 컨테이너 구성후 npm install 로 노드모듈을 설치하고 npm start 로 서버 실행
다음과 같이 작성하면 도커 컨테이너가 구성될때 데이터베이스 테이블도 자동 생성된다.
CREATE TABLE IF NOT EXISTS votes (
id serial PRIMARY KEY,
user_id TEXT,
post_id BIGINT NOT NULL,
vote_id TEXT NOT NULL,
vote_title TEXT NOT NULL,
vote_desc TEXT,
vote_expired_at TIMESTAMP
);
CREATE TABLE IF NOT EXISTS vote_items (
id serial primary key,
vote_id TEXT NOT NULL,
content TEXT NOT NULL,
item_order INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS user_vote_items (
id serial primary key,
user_id TEXT,
vote_id TEXT,
vote_item_id INTEGER
);
서버와 관련된 코드는 손대지 않아도 된다. 로컬 개발환경을 그대로 도커에 올려서 프로덕션 배포가 가능하다.
아마존 공식 문서 를 참고.
sudo yum update -y
sudo amazon-linux-extras install docker
sudo service docker start
sudo usermod -a -G docker ec2-user
ec-2 기본 유저로만 사용할거면 생략해도 되는듯?인스턴스에서 위와 같은 과정을 거친 뒤, docker-compose.yml 을 비롯한 파일들을 ec2 에 내려받고 docker-compose up -d
명령어를 치면 도커 컨테이너가 구성되고 데몬(-d)으로 실행된다.
도커 이미지를 다운받는데 약간 시간이 걸린다(1~2분 정도)