Docker(2)

서유진·2022년 10월 21일
0

server

목록 보기
2/3
post-thumbnail

Docker

docker-compose

  • 도커를 커맨드라인에서만 작업할 경우 컨테이너 조합이 많아지고 여러가지 설정이 추가되면 명령어가 금방 복잡해집니다.
  • 연결된 다수의 container를 하나로 통합하여 관리 하는 도구
  • 도커는 복잡한 설정을 쉽게 관리하기 위해 YAML방식의 설정파일을 이용한 Docker Compose라는 툴을 제공

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 : 패키지, 웹서버 등 파일

Dockerizing ; 도커 이미지 만들기

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베이스 이미지를 지정합니다. 반드시 지정해야 하며 어떤 이미지도 베이스 이미지가 될 수 있습니다.
MAINTAINERDockerfile을 관리하는 사람의 이름 또는 이메일 정보를 적습니다. 빌드에 딱히 영향을 주지는 않습니다.
WORKDIRRUN, CMD, ADD, COPY등이 이루어질 기본 디렉토리를 설정합니다..
COPY파일이나 디렉토리를 이미지로 복사합니다. 일반적으로 소스를 복사하는 데 사용합니다. target디렉토리가 없다면 자동으로 생성합니다.
ADDCOPY명령어와 매우 유사하나 몇가지 추가 기능이 있습니다. src에 파일 대신 URL을 입력할 수 있고 src에 압축 파일을 입력하는 경우 자동으로 압축을 해제하면서 복사됩니다.
RUN가장 많이 사용하는 구문입니다. 명령어를 그대로 실행합니다. 내부적으로 /bin/sh -c 뒤에 명령어를 실행하는 방식입니다.
CMD도커 컨테이너가 실행되었을 때 실행되는 명령어를 정의합니다.
EXPOSE도커 컨테이너가 실행되었을 때 요청을 기다리고 있는(Listen) 포트를 지정합니다. 여러개의 포트를 지정할 수 있습니다.
VOLUME컨테이너 외부에 파일시스템을 마운트 할 때 사용합니다. 반드시 지정하지 않아도 마운트 할 수 있지만, 기본적으로 지정하는 것이 좋습니다.
ENV컨테이너에서 사용할 환경변수를 지정합니다. 컨테이너를 실행할 때 -e옵션을 사용하면 기존 값을 오버라이딩 하게 됩니다.
profile
Backend Dev.

0개의 댓글