Docker-compose?

😎·2023년 3월 25일
0

도커

목록 보기
5/6
post-thumbnail

도커 컴포즈는 여러 컨테이너를 효율적으로 다루기 위한 프로그램이다. 어떻게 효율적으로 다룬다는 의미일까?

컨테이너를 3개 만든 후, 각 컨테이너에 Nginx, Wordpress, mariaDB 를 설치한 후 연동한다고 해보자.

docker-compose 가 있을 때와 없을 때

있을 때

위 그림에서 docker-compose.yml 이 있다.

  • docker-compose [docker-compose.yml 위치] up --build -d;

명령어를 한 번 실행하면, 각 컨테이너를 위한 이미지를 생성하는 dockerfile 을 실행하고 컨테이너를 생성하고, 3 개의 프로그램을 연결까지 해준다.

없을 때

만약 docker-compose 파일이 없다면 여러 단계가 필요하다.

  • 네트워크 만들기
    docker network create [network 이름]

  • 각 컨테이너 네트워크에 연결하기
    docker run -d --name [container 이름] --network [network 이름] [이미지 이름]

여기서는 네트워크에 연결하는 코드를 3번 입력해야한다.

docker-compose 를 사용하지 않으면, 더 많은 커맨드를 입력해야하는 번거로움이 생긴다.

docker-compose.yml

아래는 직접 만들어본 docker-compose.yml 이다.

services:
  nginx:
    build: requirements/nginx
    image: nginx
    container_name: nginx
    ports:
      - 443:443
    restart: always
    volumes:
      - wp_volume:/var/www/html/wordpress
    depends_on:
      - wordpress
    networks:
      - inception_network

  mariadb:
    init: true
    build: ./requirements/mariadb/
    image: mariadb
    container_name: mariadb
    restart: always
    expose:
      - "3306"
    env_file:
      - .env
    volumes:
      - db_volume:/var/lib/mysql/
    networks:
      - inception_network

  wordpress:
    build: requirements/wordpress
    image: wordpress
    container_name: wordpress
    restart: always
    volumes:
      - wp_volume:/var/www/html/wordpress
    expose:
      - "9000"
    networks:
      - inception_network
    env_file:
      - .env
    depends_on:
      mariadb:
        condition: service_healthy
    

volumes:
  wp_volume:
     name: wp_volume
     driver: local
     driver_opts:
       type: none
       device: /home/jaekim/data/wordpress
       o: bind
  db_volume:
     name: db_volume
     driver: local
     driver_opts:
       type: none
       device: /home/jaekim/data/mariadb
       o: bind

networks:
  inception_network:
    name: inception_network
    driver: bridge

정의는 이렇다.

services

컨테이너 서비스 정의

nginx, wordpress, mariadb

각각 nginx, wordpress, mariadb 서비스에 대한 정의

build

Dockerfile 대신에 Dockerfile을 빌드하기 위한 Build context 경로

image

이미지 이름 설정 (이미지 빌드시 태그명으로 설정)

container_name

컨테이너 이름 설정

ports

컨테이너의 포트 설정

restart

always를 설정하여 컨테이너가 중단되었을 때 자동으로 다시 시작하도록 설정

volumes

호스트 파일시스템과 컨테이너 파일시스템 간 마운트를 설정

depends_on

컨테이너 간 의존성 설정

expose

포트를 외부에 노출하지 않고 다른 컨테이너에서만 접근 가능하도록 설정

env_file

컨테이너에서 사용할 환경변수 파일을 설정

condition:

service_healthy를 설정하여 mariadb가 건강한 상태일 때만 wordpress 컨테이너가 시작되도록 설정

volumes

볼륨 정의

wp_volume, db_volume

각각 wordpress, mariadb 볼륨 정의

driver

사용할 볼륨 드라이버 설정

driver_opts

볼륨 드라이버 옵션 설정

type

사용할 볼륨 드라이버 유형

device

호스트 파일시스템에서 사용할 경로

o

마운트 옵션 설정

networks

네트워크 정의

inception_network

네트워크 이름 설정. 도커 컴포즈에 정의된 컨테이너들이 상호작용할 수 있는 네트워크를 형성하도록 하는 옵션이다.

driver

사용할 네트워크 드라이버 설정 (기본값: bridge)

profile
jaekim

1개의 댓글

comment-user-thumbnail
2024년 8월 14일

왜 mariadb에만 init: true를 해주는 것인가요?

답글 달기