우와한 개발자

[Docker] Docker Compose란? 명령어와 yml 작성법 정리

by 우와한개발자

[ Docker Compose ]

1. Docker Compose란?

  • docker를 사용해 여러 개의 컨테이너를 쉽게 정의하고 실행하기 위한 도구
  • docker compose를 사용하면 YAML 파일을 통해 어플리케이션의 서비스, 네트워크, 볼륨 등을 정의

 

2. Docker Compose 명령어

  • 구버전은 docker-compose 형태
  • 요즘엔 docker compose 형태의 하위 명령어 방식

 

1) docker compose 설치

sudo apt install docker-buildx-plugin
sudo apt install docker-compose-plugin
⚠️ apt 명령어?
- Ubuntu에서 사용하는 패키지 관리 도구
- 설정된 패키지 저장소(repository)에서 프로그램을 검색하고 설치함.
- docker Registry가 아닌 Ubuntu 패키지 저장소라면 명령어 차이 있음
#Ubuntu 패키지 저장소
sudo apt install docker-buildx
sudo apt install docker-compose-v2​

 

2) 주요 명령어

명령어 설명
docker compose up 도커 컴포즈 파일을 사용하여 서비스 시작
docker compose up -d 서비스를 백그라운드 모드로 시작
docker compose down 모든 서비스 중지 및 컨테이너와 네트워크 삭제
docker compose ps 현재 실행 중인 서비스 상태 확인
docker compose logs 서비스 로그 출력
docker compose exec <service> <command> 실행 중인 서비스 컨테이너에서 명령 실행
docker compose build 도커 이미지 빌드
docker compose pull 도커 허브에서 이미지 다운로드
docker compose restart 서비스 재시작
docker compose stop 서비스 정지
docker compose start 정지된 서비스 시작
docker compose pause 서비스 일시 중지
docker compose unpause 일시 중지된 서비스 재시작
docker compose rm 중지된 서비스 컨테이너 삭제
docker compose down -v 서비스 및 관련 볼륨까지 삭제
docker compose config 컴포즈 파일 구성 확인

 

3) 자주 같이 사용되는 추가 옵션

옵션 설명 예시
-d 백그라운드 실행 docker compose up -d
-f 특정 compose 파일 지정 docker compose -f docker-compose.yml up
--build 실행 전에 이미지 다시 빌드 docker compose up --build
--no-cache 캐시 없이 이미지 빌드 docker compose build --no-cache
-v 볼륨까지 함께 삭제 docker compose down -v
-p 프로젝트 이름 지정 docker compose -p myapp up -d
  • 현재 디렉터리에 기본 이름의 Compose 파일이 있으면 -f 안 써도 됨.
  • 기본 이름의 Compose 파일
    • docker-compose.yml
    • docker-compose.yaml
    • compose.yml
    • compose.yaml

 

3. docker compose 작성

  • yml 파일로 정의
주요 섹션 의미
services 실행할 컨테이너 정의
networks 컨테이너 네트워크 정의
volumes 데이터 저장소 정의
services:
  db:
    image: jinkyoungheo/oracle-xe
    container_name: oracle-container
    ports:
      - "1521:1521"
    environment:
      ORACLE_PASSWORD: oracle

  app:
    image: jinkyoungheo/emp-web
    container_name: emp-web-container
    ports:
      - "8080:8080"
    environment:
      DB_IP: 192.168.0.86
      DB_USER: hr
      DB_PASS: hr
      API_BASE_URL: "<http://192.168.0.86:8080>"
    depends_on:
      - db

  tc:
    image: jinkyoungheo/tomcat10
    container_name: tomcat
    ports:
      - 8888:8080
    volumes:
      - tomcat_vol:/usr/local/tomcat/webapps
    depends_on:
      - db

volumes:
  tomcat_vol:
  
networks:
	my_network:
		driver: bridge

 

⚠️ YAML 파일 작성 규칙
- 콜론(:) 뒤에 바로 값을 쓰는 경우 → 단일 값(문자열, 숫자 등)을 설정할 때 사용
- 콜론(:) 뒤에 줄바꿈 후 들여쓰기하는 경우 → 리스트(-), 딕셔너리(객체), 여러 설정이 있는 복합 구조를 정의할 때 사용
# 단일 값
image: nginx

# 리스트
ports:
  - 8080:80

# 딕셔너리
environment:
  DB_USER: root
  DB_PASS: 1234​

 

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기