docker-compose.yml
container 실행 옵션을 미리 정의한 문서
참고
# (예시) docker-compose.yml
# mysql 컨테이너 + nodejs 컨테이너 관리 도구
version: "3.5"
networks:
app-tier:
driver: bridge
services:
mysql: # 첫 번째 컨테이너
networks:
- app-tier
image: mysql:8.0.29
platform: linux/x86_64
restart: always
environment:
MYSQL_ROOT_PASSWORD: # 비밀번호 입력~
ports:
- "3306:3306"
expose:
- "3306"
server: # 두 번째 컨테이너
networks:
- app-tier
container_name: server
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080"
restart: always
depends_on:
- mysql
links:
- mysql
# docker-compose 실행
$docker-compose up
docker
환경 설정하기
file
: 패키지, 웹서버 등 파일
Dockerfile
이미지 빌드용 DSL(Domain Specific Language)
참고
# Dockerfile
# ts -> js로 compile하기 위한 과정
# base image1: Node 16
FROM node:16 AS builder
WORKDIR /app
# 프로젝트의 모든 파일을 WORKDIR(/app)로 복사
# .dockerignore 적용
COPY . .
# 패키지 설치
RUN npm install
RUN npm run build # build 함
# base image2 : Node 10-alpine(light weight)
FROM node:16-alpine
WORKDIR /app
# build된 프로젝트를 가져온다
COPY --from=builder /app ./
# 서버 실행
CMD ["npm","run", "start:prod"]
.dockerignore
docker CLI는 컨텍스트를 docker 데몬으로 보내기 전에 컨텍스트 .dockerignore의 루트 디렉터리에 이름이 지정된 파일을 찾습니다. 이 파일이 존재하는 경우 CLI는 해당 파일의 패턴과 일치하는 디렉토리를 제외하도록 컨텍스트를 수정합니다.
# .dockerignore node_modules dist
# docker 빌드 (이미지 생성)
$docker build -t app .
# 컨테이너 실행
$docker run -d app
더 자세한건 ->
docker-docs
문법 | 설명 |
---|---|
FROM | 베이스 이미지를 지정합니다. 반드시 지정해야 하며 어떤 이미지도 베이스 이미지가 될 수 있습니다. |
MAINTAINER | Dockerfile 을 관리하는 사람의 이름 또는 이메일 정보를 적습니다. 빌드에 딱히 영향을 주지는 않습니다. |
WORKDIR | RUN , CMD , ADD , COPY 등이 이루어질 기본 디렉토리를 설정합니다.. |
COPY | 파일이나 디렉토리를 이미지로 복사합니다. 일반적으로 소스를 복사하는 데 사용합니다. target디렉토리가 없다면 자동으로 생성합니다. |
ADD | COPY 명령어와 매우 유사하나 몇가지 추가 기능이 있습니다. src에 파일 대신 URL을 입력할 수 있고 src에 압축 파일을 입력하는 경우 자동으로 압축을 해제하면서 복사됩니다. |
RUN | 가장 많이 사용하는 구문입니다. 명령어를 그대로 실행합니다. 내부적으로 /bin/sh -c 뒤에 명령어를 실행하는 방식입니다. |
CMD | 도커 컨테이너가 실행되었을 때 실행되는 명령어를 정의합니다. |
EXPOSE | 도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정합니다. 여러개의 포트를 지정할 수 있습니다. |
VOLUME | 컨테이너 외부에 파일시스템을 마운트 할 때 사용합니다. 반드시 지정하지 않아도 마운트 할 수 있지만, 기본적으로 지정하는 것이 좋습니다. |
ENV | 컨테이너에서 사용할 환경변수를 지정합니다. 컨테이너를 실행할 때 -e옵션을 사용하면 기존 값을 오버라이딩 하게 됩니다. |