도커 컴포즈 파일 작성

728x90
반응형

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

 

 

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

  • 도커 컴포즈는 정의 파일(컴포즈 파일)을 그대로 실행하는 역할을 하므로 컴포즈 파일이 반드시 필요하다.
  • 이전에 만든 아파치 컨테이너와 똑같은 컨테이너를 만드는 컴포즈 파일을 살펴보자.
version: "3"

services:
  zw_apache:
    image: httpd
    ports:
      - 8080:80
    restart: always
docker run --name zw_apache -d -p 8080:80 httpd
  • 위 컴포즈 파일은 우리가 지금까지 했던 아파치 컨테이너를 만드는 명령어와 표현만 다를 뿐 동일한 내용이다.
  • 워드프레스 컨테이너와 동일한 설정의 컨테이너를 만드는 컴포즈 파일로 한번 더 살펴보자. (편의상 MySQL과 네트워크 부분은 생략하고 워드프레스 컨테이너 부분만 작성)
version: "3"

services:
  zw_wordpress:
    depends_on:
      - zw_mysql
    image: wordpress
    network:
      - zw_wordpress_net
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST=zw_mysql
      WORDPRESS_DB_NAME=wordpress_db
      WORDPRESS_DB_USER=wordpress_zw
      WORDPRESS_DB_PASSWORD=zwpass
docker run --name zw_wordpress -dit --net=zw_wordpress_net -p 8085:80 -e WORDPRESS_DB_HOST=zw_mysql -e WORDPRESS_DB_NAME=wordpress_db -e WORDPRESS_DB_USER=wordpress_zw -e WORDPRESS_DB_PASSWORD=zwpass wordpress

 

 

 

컴포즈 파일(정의 파일) 작성법

  • 정의 파일은 YAML 형식을 따른다. 파일의 확장자는 .yml이다. 메모장 등의 텍스트 에디터로 작성하면 된다.
  • 파일 이름은 docker-compose.yml 이라고 짓는다. -f 옵션을 사용해 파일 이름을 지정하면 다른 이름을 사용할 수 있지만 그렇지 않다면 정해진 이름을 사용해야 한다.
  • 정의 파일의 형식
    • YAML 형식
  • 파일 이름
    • docker-compose.yml

 

 

컴포즈 파일을 작성하는 방법

  • 컴포즈 파일은 맨 앞에 컴포즈 버전을 적고, services와 networks, volumes를 차례로 기입한다.
  • 도커 컴포즈와 쿠버네티스에서는 컨테이너의 집합체를 서비스라고 부른다(본질은 그냥 컨테이너다).
  • 작성 요령은 주 항목 -> 이름 추가 -> 설정과 같은 순서이다.
  • 주 항목은 services, networks, volumes 등이 있으며, 주 항목 아래에 정의 내용이 기재되므로 services: 와 같이 뒤에 콜론(:)을 붙인다.
version:	<- 버전 기재
services:	<- 컨테이너 관련 정보
networks:	<- 네트워크 관련 정보
volumes:	<- 볼륨 관련 정보

 

  • 주 항목 아래에는 이름을 기재한다. 컨테이너는 컨테이너 이름, 네트워크는 네트워크 이름, 볼륨은 볼륨 이름을 기재한다.
  • 이름은 주 항목보다 한 단 들여쓰기해서 적는다. 한 단의 공백 개수는 몇 개여도 상관없지만 탭은 사용할 수 없다. 한 단을 '공백 한 개'로 정했다면 그 뒤로도 계속 같은 갯수의 공백을 한 단으로 사용해야 한다. YAML 형식은 공백에 따라 의미가 달라지기 때문이다.
  • 이름 뒤에는 반드시 콜론(:)을 붙인다.
  • 해당 줄에 이어서 설정을 기재하려면 콜론 뒤로 공백이 하나 있어야 한다.
  • 여러 항목이 있으면 같은 들여쓰기로 기재한다.
version: "3"
services:
  컨테이너_이름1:
  컨테이너_이름2:
networks:
  네트워크_이름1:
volumes:
  볼륨_이름1:
  볼륨_이름2:

 

  • 이름을 기재한 다음에는 각 컨테이너의 설정을 기재한다.
  • 기재할 내용이 한 가지라면 콜론 뒤에 이어적으면 된다. 하지만 내용이 여러 개라면 줄을 바꿔 하이픈(-)을 앞에 적고 들여쓰기를 맞춘다. 이때 들여쓰기는 한 단을 더 들여쓴다.

 

 

컴포즈 파일 작성 요령 정리

  • 첫 줄에 도커 컴포즈 버전을 기재한다.
  • 주 항목(services, networks, volumes)아래에 설정 내용을 기재한다.
  • 항목 간의 상화 관계는 공백을 사용한 들여쓰기로 나타낸다.
  • 들여쓰기는 같은 수의 배수만큼의 공백을 사용한다.
  • 이름은 주 항목 아래에 들여쓰기한 다음 기재한다.
  • 컨테이너 설정 내용은 이름 아래에 들여쓰기한 다음 기재한다.
  • 여러 항목을 기재하려면 줄 앞에 하이픈을 붙인다.
  • 이름 뒤에는 콜론을 붙인다.
  • 콜론 뒤에는 반드시 공백이 와야 한다.
  • # 뒤의 내요은 주석으로 간주한다.
  • 문자열은 작은 따옴표 또는 큰 따옴표로 감싼다.

 

  • depends_on은 다른 서비스에 대한 의존관계를 나타낸다.
  • restart는 컨테이너 종료 시 재시작 여부를 설한다.

 

[실습] 컴포즈 파일 작성

  • 워드프레스 및 MySQL 컨테이너와 동일한 컨테이너를 만드는 컴포즈 파일을 작성해본다.
  • 워드프레스 컨테이너는 depends_on 항목을 추가해 의존관계를 설정한다.
  • 볼륨에 대한 정보도 추가한다.

 

실습 내용

  1. 주 항목 작성
  2. 이름 작성
  3. MySQL 컨테이너 정의 작성
  4. 워드프레스 컨테이너 정의 작성

 

실습

먼저 내 문서에 com_folder라는 이름의 폴더를 하나 생성한다. 그리고 메모장을 사용해 컴포즈 파일을 작성한다. 파일 이름은 docker-compose.yml로 한다.

 

version: "3"
services:
networks:
volumes:

 

버전과 필수 주 항목을 작성한다.

 

version: "3"
services:
  zw_mysql:
  zw_wordpress:
networks:
  wordpress_net:
volumes:
  mysql_vol:
  wordpress_vol:

 

이름을 작성한다.

 

 

version: "3"
services:
  zw_mysql:
    image: mysql:5.7
    networks:
      - wordpress_net
    volumes:
      - mysql_vol:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wordpress_zw
      MYSQL_PASSWORD: zwpass
  zw_wordpress:
networks:
  wordpress_net:
volumes:
  mysql_vol:
  wordpress_vol:

 

MySQL 컨테이너의 정의를 작성한다.

 

 

version: "3"
services:
  zw_mysql:
    image: mysql:5.7
    networks:
      - wordpress_net
    volumes:
      - mysql_vol:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: myrootpass
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wordpress_zw
      MYSQL_PASSWORD: zwpass
  zw_wordpress:
    depends_on:
      - zw_mysql
    image: wordpress
    networks:
      - wordpress_net
    volumes:
      - wordpress_vol:/var/www/html
    ports:
      - 8085:80
    restart: always
    environment:
      WORDPRESS_DB_HOST: zw_mysql
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wordpress_zw
      WORDPRESS_DB_PASSWORD: zwpass
networks:
  wordpress_net:
volumes:
  mysql_vol:
  wordpress_vol:

 

워드프레스 컨테이너의 정의를 작성한다. 작성을 한 후 저장을 한다.

 

 

728x90
반응형