IT Log

Docker Compose 본문

Open Source/Docker

Docker Compose

newly0513 2019. 12. 12. 14:55
728x90
반응형

Docker Compose 작성

  1. Dockerfile 작성
  2. docker-compose.yml 작성
  3. docker-compose 실행

 

Dockerfile

  • Environment variables
    • ADD
    • COPY
    • ENV
    • EXPOSE
    • FROM
    • LABEL
    • STOPSIGNAL
    • USER
    • VOLUME
    • WORKDIR
  • 파일 이름은 Default가 Dockerfile이고, 다른 이름으로 파일을 작성할 경우 나중에 경로를 입력할 때 파일명을 작성

Examples

FROM <image>[:<tag>] [AS <name>]
ARG <name>[=<default value>]
ENV <key> <value>
COPY <local path> <container path>
RUN <command>

###
FROM postgres:9.6
ARG ARGUMENT=true
ENV PLUGIN=v1.0.0
COPY ./file /usr/loca/copy/file
RUN apt-get update \
&& git

자세한 설명은 https://docs.docker.com/engine/reference/builder/


docker-compose.yml

  • 파일 이름은 docker-compose.yml이나 docker-compose.yaml이 Default이나 docker-compose-test.yml 이렇게 변경해서 작성해도 상관X (추후에 docker-compose를 실행할 때 파일을 지정해주면 됨)
  • docker-compose.yml 파일에 작성되는 구성요소가 많고 다양하므로 예시작성만 보여주고 그 외는 사이트를 참고
  • 작성 예시보면 들여쓰기가 다르게 작성되어 있는데 들여쓰기 정도가 달라지면 Error가 발생 (Python과 유사)

Examples

version: "3.7"
services:

  redis:
    image: redis:alpine
    ports:
      - "6379"
    networks:
      - frontend
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  db:
    image: postgres:9.4
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - backend
    deploy:
      placement:
        constraints: [node.role == manager]

  vote:
    image: dockersamples/examplevotingapp_vote:before
    ports:
      - "5000:80"
    networks:
      - frontend
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
      restart_policy:
        condition: on-failure

  result:
    image: dockersamples/examplevotingapp_result:before
    ports:
      - "5001:80"
    networks:
      - backend
    depends_on:
      - db
    deploy:
      replicas: 1
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure

  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 1
      labels: [APP=VOTING]
      restart_policy:
        condition: on-failure
        delay: 10s
        max_attempts: 3
        window: 120s
      placement:
        constraints: [node.role == manager]

  visualizer:
    image: dockersamples/visualizer:stable
    ports:
      - "8080:8080"
    stop_grace_period: 1m30s
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      placement:
        constraints: [node.role == manager]

networks:
  frontend:
  backend:

volumes:
  db-data:

자세한 설명은 https://docs.docker.com/compose/compose-file/


docker-compose

  • docker-compose --help를 치면 다양한 명령어가 존재, 또한 docker compose up --help를 치면 up 명령에 대한 옵션들도 존재
 docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]

Examples

docker-compose -f docker-compose-test.yml up -d
// docker-compose-test.yml파일을 backgroud에서 실행하라는 명령

자세한 설명은 https://docs.docker.com/compose/reference/overview/


docker-compose 명령 → docker-compose.yml 파일 → docker-compose.yml 파일 내부 build 구성이 존재하면 → 해당 service에 build 구성에 대한 Dockerfile 실행

 

Examples

# 파일 구성은 아래와 같이 폴더를 하나 만들어서 그 안에서 파일을 관리하는게 좋음
Project
    docker-compose.yml
    Dockerfile
    
    
# docker-compose.yml
...
service:
  test_db:
    image:postgres:9.6
    build: .
...

# Dockerfile
FROM postgres:9.6
...
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
# 아래와 같은 폴더 구성일 경우
Project
    docker-compose.yml
    dockerfolder
    	Dockerfile
        
# docker-compose.yml
...
service:
  test_db:
    image:postgres:9.6
    build:
      context: ./dockerfolder
      dockerfile: Dockerfile
...

# Dockerfile 
위의 작성방법과 동일

 

728x90
반응형

'Open Source > Docker' 카테고리의 다른 글

Docker Compose Install  (0) 2020.07.16
Docker Install  (0) 2020.07.16
docker  (0) 2019.12.11
Comments