상세 컨텐츠

본문 제목

Docker compose 사용법

DevOps/Docker

by code_down 2024. 5. 21. 15:29

본문

docker compose 란 ?

여러 개의 docker container를 구축 및 실행 순서를 관리하기 위한 기능이다.

docker-compose.yml 파일을 작성하여 실행시킬 수 있다. (yaml 형식으로 작성해야 한다.)

 

docker compose 설치

#docker compose 설치
sudo curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
 
#docker compose 실행 권한 설정
chmod +x /usr/local/bin/docker-compose
 
#docker compose 버전 확인
docker-compose --version

 

docker-compose.yml 파일 작성법

Services

docker compose 에서 실행할 컨테이너를 정의합니다.

 

  • image :  서비스에서 사용할 도커 이미지를 정의 (Docker Hub 또는 Local 에 저장된 이미지 사용)
  • continer_name : 컨테이너 이름을 정의
  • ports : 호스트 포트 와 컨테이너 포트를 정의
  • environment : 서비스의 환경 변수를 정의
  • volumes : 호스트 와 컨테이너의 데이터 공유를 위한 볼륨을 정의
  • depends_on : 서비스에 의존하는 서비스를 정의
  • build : Dockerfile 을 이용하여 이미지를 빌드합니다.

 

Networks

컨테이너의 네트워크를 정의합니다. 컨테이너는 동일한 네트워크에서 연결된 다른 컨테이너와 통신할 수 있습니다.

 

  • driver : 네트워크 드라이버를 지정 (Docker Engine에서 제공하는 기능으로, 다양한 네트워크 타입을 지원)
  • driver_opts : 네트워크 드라이버에 대한 옵션을 정의
  • ipam : IP 주소 관리 방법을 정의
  • attachable : 다른 서비스에서 해당 네트워크를 사용할 수 있는지 여부를 지정

 

Volumes

호스트 파일시스템과 컨테이너의 파일 시스템을 마운트하여 데이터를 관리합니다.

 

    • driver : 볼륨 드라이버 지정하는 데 사용 (default local 이외 다른 옵션을 사용할 수 있다.)
    • name : 옵션을 사용하여 이름을 지정할 수 있다
    • external : 이미 생성된 Volume을 참조할 수 있다. (volume을 새로 생성하지 않고, 기존 volume을 사용)

 

Configuration

docker-compose.yml 파일 내에서 서비스와 관련된 설정을 중앙 집중적으로 관리할 수 있습니다.

 

Deployments 

서비스를 배포하는 데 사용할 설정을 정의합니다.

 

  • replicas: 서비스 인스턴스의 수를 지정
  • placement: 서비스 인스턴스를 배치할 노드를 선택하는 규칙을 지정
  • update_config: 서비스 업데이트를 제어하는 옵션을 지정
  • resources: 서비스 인스턴스가 사용할 CPU 및 메모리 등의 자원을 지정
  • networks: 서비스가 연결할 네트워크를 지정합

 

ex) 웹서버 와 데이터베이스 생성

version: "3"
services:
  web:
    build: .
    ports:
      - "80:80"
    environment:
      - DB_HOST=db
      - DB_PORT=3306
      - DB_USER=user
      - DB_PASSWORD=password
      - DB_NAME=database_name
    depends_on:
      - db
  db:
    image: mysql:5.7
    restart: always
    environment:
      - MYSQL_DATABASE=database_name
      - MYSQL_USER=user
      - MYSQL_PASSWORD=password
      - MYSQL_ROOT_PASSWORD=root_password
    volumes:
      - ./data:/var/lib/mysql