Docker

[Docker] 7-3. 도커 컴포즈 파일 내용

patrick-star 2023. 5. 30. 23:16
728x90

도커 컴포즈 공식문서

도커 컴포즈 정의 파일 내용 살펴보기

도커 컴포즈는 정의 파일을 그대로 실행하기 때문에 컴포즈 파일(docker-compose.yml)이 반드시 필요하다.
작성방법은 간단하다.

ex) 아파치 컨테이너의 컴포즈 파일

version: "3" 

services: 
    apa000ex2:         # 컨테이너 이름
        image: httpd     # 사용할 이미지 
        ports: 
            - 8080:80     # 매핑할 포트 (호스트포트:컨테이너포트)
        restart: always # 

위에 있는 컴포즈 파일은 아래의 명령어랑 동일한 의미를 갖는다.

docker run --name apa000ex2 -d -p 8080:80 httpd 

# 여기서 detach 모드는 docker-compose up을 실행할 때 옵션으로 -d를 붙여주면 됨 

cf) restart도 있고 restart_policy도 있다.

  • restart : 위에 있는 예시들 처럼 작성해주면 된다.
정책 의미
"no" 기본적인 정책값. 어떤 상황에서도 컨테이너가 재시작되지 않음
always 항상 재시작
on-failure exit 코드가 on-failure 에러를 발생시켰을 때 재시작
unless-stopped 컨테이너가 종료되지 않는다면 항상 재시작
  • restart_policy : restart 옵션을 대신에서 사용할 수 있는 옵션

ex) 작성 예시

    ... 
    restart_policy: 
        condition : on-failure
        delay : 5s
        max_attempts : 3
        windows : 120s 
옵션 의미
condition none, on-failure, any 중 하나를 선택하면 됨. (any가 default)
delay 재시작을 시도할 때 얼마나 기다릴 지 설정 (default: 5s)
max_attempts (기본적으로는 시도를 멈추지 않지만) 시도를 멈출 때까지 얼마나 많이 시도할 지 설정
windows 재시작을 성공하기 전에 얼마나 기다릴 지 설정 (default : 즉시 결정)

ex) 워드프레스 컨테이너의 컴포즈 파일

version: "3" 

services: 
    wordpress000ex12: 
        depends_on:  
            - mysql000ex11 
        image: wordpress
        networks: 
            - wordproess000net1
        ports: 
            - 8085:80 
        restart: always 
        environment: 
            WORDPRESS_DB_HOST=mysql_host
            WORDPRESS_DB_NAME=mysql_name
            WORDPRESS_DB_USER=db_user
            WORDPRESS_DB_PASSWORD=db_pwd 
  • depends_on : 서비스 간의 종속성을 표현.

1) docker-compose up을 실행한 경우 : wordpress000ex12라는 컨테이너를 실행하기 전에 mysql000ex11 컨테이너를 만들고 실행하도록 설정된 것이다.

2) docker-compose up [SERVICE] 실행한 경우 : 도커 컴포즈 파일에 정의된 컨테이너(서비스)의 종속성을 자동으로 포함시킨다.

ex. docker-compose up wordpress000ex12라고 실행했다면 mysql000ex11 컨테이너를 생성하고 시작할 것이다.

3) docker-compose stop : 종속된 순서에 따라 컨테이너를 종료시킨다. 즉, mysql000ex11 종료하기 전에 wordpress000ex12를 먼저 종료시킨다

위에 있는 컴포즈 파일은 아래의 명령어랑 동일한 의미를 갖는다.

docker run --name wordpress000ex12 -d -it --net=wordproess000net1 
            -p 8085:80 
            -e WORDPRESS_DB_HOST=mysql_host
            -e WORDPRESS_DB_NAME = mysql_name
            -e WORDPRESS_DB_USER = db_user
            -e WORDPRESS_DB_PASSWORD = db_pwd 
            wordpress

컴포즈 파일의 항목

관련 공식문서

현재 compose 파일 포맷 최신버전 3.8

  • 주 항목
항목 내용
services 컨테이너 정의
networks 네트워크 정의
volumes 볼륨 정의
  • 자주 나오는 정의

| 항목 | docker run 커맨드의 해당 옵션 또는 인자 | |
| image | 이미지 인자 | 사용할 이미지 지정 |
| networks | --net | 접속할 네트워크 지정 |
| volumes | -v, --mount | 스토리지 마운트 설정 |
| ports | -p | 포트 설정 |
| environment | -e | 환경변수 설정 |
| depends_on | 없음 | 다른 서비스에 대한 의존관계 설정 |
| restart | --restart | 컨테이너 종료 시 재시작 여부 설정 |

구체적인 작성 방법 (p.234 ~ 246)

컴포즈 파일

도커 컴포즈로 만든 컨테이너는 도커 엔진을 통해 여러 가지 명령을 내릴 수 있다.
물론, 해당 컨테이너의 내용이 바뀐다고 해서 도커 컴포즈 파일에 영향을 끼치는 건 아니다.

예를 들어 컨테이너의 이름을 변경했다고 해보자.

나중에 도커 컴포즈로 컨테이너를 정지, 삭제하려고 한다면
컴포즈 파일에 기재된 이름과 컨테이너의 실제 이름이 일치하지 않기 때문에 컨테이너를 정지할 수 없다.

컨테이너를 생성하고 나서 도커 컴포즈에서 정의한 컨테이너의 이름을 변경할 때도 마찬가지다.

출처 : 그림과 실습으로 배우는 도커 & 쿠버네티스