[Docker] docker compose

2024. 12. 31. 11:07·DevOps/Docker

docker compose

여러 개의 docker 컨테이너를 관리하는 도구

  • docker-compose.yaml 파일에 컨테이너들을 정의
  • 모든 컨테이너를 실행하거나 종료할 수 있는 기능을 제공

docker compose 명령어

  • docker compose up: 모든 컨테이너를 실행
  • docker compose down: 모든 컨테이너 중지
  • docker compose ps: 실행 중인 서비스 확인
  • docker compose restart <서비스명>: 특정 서비스만 재시작

docker-compose.yaml 예시

services:
  app:
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

serivces: 서비스(컨테이너)를 정의하는 부분으로 여기에는 두 개의 서비스가 정의됨

  • app: Node.js 앱
  • mysql: MySQL DB

serivces.[service name].images: 사용할 이미지

serivces.[service name].command: 컨테이너가 실행될 때 실행할 명령어

serivces.[service name].ports: 호스트 머신의 포트와 컨테이너의 포트를 연결

serivces.[service name].working_dir: 컨테이너 내부에서 작업할 디렉터리

serivces.[service name].volumes: 볼륨 마운트

  • ./:/app 은 호스트의 현재 디렉터리를 app 컨테이너의 /app 디렉터리에 연결하는 것을 의미
  • todo-mysql-data:/var/lib/mysql 은 todo-mysql-data 볼륨을 mysql 컨테이너의 /var/lib/mysql 디렉터리에 연결하는 것을 의미

serivces.[service name].environment: 환경변수를 설정

volumes: 생성할 볼륨을 지정

  • todo-mysql-data라는 볼륨을 생성

docker compose 네트워크

docker compose로 실행되는 컨테이너는 같은 네트워크 영역에 존재하며, 서로 서비스 이름으로 통신이 가능함

 

docker-compose.yaml 파일 생성하기

  • frontend: node.js 기반 웹페이지
  • backend: Django 기반 api 서버
services:
  frontend:
    image: simple-web-frontend
  backend:
    image: simple-web-backend

 

컨테이너 실행하기

  • docker-compose.yaml 파일에서 네트워크가 정의되지 않은 경우 기본 네트워크를 자동으로 생성
$ docker compose up -d

 

네트워크 목록 확인

  • bridge 네트워크가 생성됨
  • docker compose up 시 자동으로 생성되는 네트워크로 인해 서비스 끼리 서로 통신이 가능
$ docker network ls

 

backend와 frontend의 컨테이너 내부에 접속해서 ip 대역을 확인해보면, 같은 네트워크에 포함된 것을 확인할 수 있음

  • backend: 192.168.107.3/24
  • frontend: 192.168.107.2/24
$ docker exec -it my-website-dockerfile-backend-1 /bin/sh
backend$ ip a

$ docker exec -it my-website-dockerfile-frontend-1 /bin/sh
frontend$ ip a

 

같은 네트워크에 있는 서비스들은 서비스 이름을 도메인처럼 사용 가능함

  • backend에서 frontend로 요청시 192.168.107.2로부터 응답을 받음
  • frontend에서 backend로 요청시 192.168.107.3로부터 응답을 받음
backend$ ping frontend
frontend$ ping backend

 

'DevOps > Docker' 카테고리의 다른 글

[Docker] 투표 앱 docker compose로 배포해보기  (0) 2024.12.31
[Docker] Multi-stage build  (0) 2024.12.31
[Docker] Volume  (0) 2024.12.31
[Docker] Dockefile  (0) 2024.12.31
[Docker] 이미지  (0) 2024.12.31
'DevOps/Docker' 카테고리의 다른 글
  • [Docker] 투표 앱 docker compose로 배포해보기
  • [Docker] Multi-stage build
  • [Docker] Volume
  • [Docker] Dockefile
Doodo
Doodo
  • Doodo
    Doodo
    Doodo
  • 전체
    오늘
    어제
    • 분류 전체보기 (192)
      • CS (17)
        • Network (11)
        • Database (6)
      • Language (19)
        • Python (11)
        • SQL (6)
        • R (2)
      • Linux (17)
      • DevOps (35)
        • Git (7)
        • Docker (8)
        • Kubernetes (9)
        • GCP (4)
        • AWS (7)
      • Data Engineering (50)
        • 책 리뷰 (14)
        • Airflow (35)
        • Redis (1)
      • DBMS (21)
        • CUBRID (21)
      • ML & DL (2)
      • 코딩테스트 (24)
      • 프로젝트 (7)
        • 서울시 대기현황 데이터 적재 프로젝트 (4)
        • CryptoStream (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
Doodo
[Docker] docker compose
상단으로

티스토리툴바