Recent Posts
Recent Comments
250x250
관리 메뉴

JIE0025

[Docker] 도커 컴포즈의 정의와 yaml파일 구성요소 본문

Infra/Cloud, Docker, Kubernetes

[Docker] 도커 컴포즈의 정의와 yaml파일 구성요소

sdoaolo 2025. 10. 31. 22:47

 

이전에 도커에 대한 개념을 잡고 실습을 해봤었다. 

 

 


[Docker] 도커의 기본 개념과 전체 흐름 이해하기

https://jie0025.tistory.com/736

 

[Docker] 도커 Hub / 자주 사용되는 도커 CLI 명령어

https://jie0025.tistory.com/737

 

[Docker] 외부에서 접속시 컨테이너 네트워크로 포트 연결

https://jie0025.tistory.com/738

 

 

 

오늘은 도커 컴포즈에 대해 알아보자. 

 

 


 

 

✅ Docker Compose 

 

도커 컴포스는 다수의 컨테이너를 관리하기 위해 활용한다. 

 

컨테이너를 띄우는 상황을 생각해보자.

1개 2개의 컨테이너 관리는 문제가 없다.

 

근데 관리해야할 컨테이너의 개수가 100개 200개 500개가 되는순간은 ?

도커로 한계가 발생한다.

 

 

여러개의 컨테이너가 하나의 어플리케이션으로 동작하는 상황을 생각하자. 

웹서버 컨테이너와 DB컨테이너 2개의 컨테이너가 구성되어있다. 

 

이때 두 서버가 모두 제대로 동작하는지 확인하기 위해   두개의 컨테이너를 모두 접속하여 

실행해보고 확인해볼수있기는한데....

이런 절차가 매우 번거로우며,  

차라리 두 컨테이너가 묶음으로 관리되면 좋겠다는 생각을 하게 된다. 

 

 

이런 상황에서 도커 컴포즈를 사용한다.

컨테이너를 이용한 서비스 개발과   CI를 위하여  여러개의 컨테이너를 하나의 프로젝트로서 다룰수 있는 환경을 제공해준다.

 

 

 

 

결국   도커 컴포즈  한 업무를 구성하는 여러개의 컨테이너를 한번에 관리하는 기술이다. 


 

 

✅ 도커 컴포즈 파일 정의 

도커에서 자체 제공하며 yaml 파일로 작성한다. 

 

version, services, volumns, networks    4가지 항목으로 구성된다.

 

 

⚠️   yaml파일은  탭을 인식하지 못하여  2개의 공백을 사용해 하위 항목을 작성해주면 된다. 

 

 

# example

version: '2.10'
services: 
  tomcat1: 
    image: tomcat1  //사용할 컨테이너 이미지 이름
    container_name: tomcat3 ////컨테이너 이름을 정해야 name오류가 안뜸
    ports:
      - 8080:8080  //컨테이너 포워딩 설정

  mysql2:
    image: mysql2
    container_name: mysql2
    ports:
      - 3307:3306
    environment:  //환경변수 설정
      MYSQL_PASSWORD: root

 

 

 

version:

 버전을 정의하는 부분이다. 

 

 

services :

애플리케이션의 각 컨테이너를 정의하는 섹션이다. 

서비스 내부에 컨테이너를 정의하는데

컨테이너의 이미지/ 명령 / 환경변수 / 네트워크 설정등을 포함할수있따> 

 

 

아래 예시를 보면   web으로 엔진엑스 서버를 실행하고

db로 postgre 를 실행한다; .

 

엔진엑스 서버는 컨테이너 내부에서 80포트로 동작하며   

볼륨쪽에선 로컬의  ./html 디렉터리를 /usr/share/nginx/html 디렉터리로 마운트한다.

 

DB는 Postgre SQL을 실행하는데  환경변수를 통해  데이터베이스 설정을 지정한다. 

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - my-network

  db:
    image: postgres:13
    environment:
      POSTGRES_USER: example
      POSTGRES_PASSWORD: example
      POSTGRES_DB: example_db
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - my-network

 

 

volumes 

volumes:
  mydata:
  • 데이터를 영구적으로 저장할 수 있는 도커 볼륨을 정의한다 
  • 컨테이너가 삭제되더라고 데이터가 유지될수 있게 하는 것이다. 

 

networks

networks:
  mynetwork:

 

 

networks

도커 네트워크를 정의하는 부분인데

각 서비스가 이 네트워크를 통해 서로 통신 할 수 있다. 

 

 

 

 

 


references

https://seosh817.tistory.com/387#google_vignette

https://cozy-dev-area.tistory.com/75

 

 

 

 

728x90