Cloud System Engineer

도커 컴포즈의 활용 본문

리눅스/docker

도커 컴포즈의 활용

클라우드 엔지니어 2021. 2. 15. 23:31

도커 컴포즈를 사용하려면 컨테이너 설정을 저장해 놓은 YAML 파일이 필요함
기존에 사용하던 run 명령어를 yaml 파일로 변환 하는것이 도커 컴포즈 사용법의 대부분이다.
yaml 파일은 크게 비전 , 서비스, 볼륨 ,네트워크 정의 4가지 항목으로 구성됨

가장많이 사용하는 것은 서비스 정의이며, 볼륨정의와 네트워크 정의는 서비스로 생성된 컨테이너에 선택적으로
사용된다. 각 항목의 하위 항목을 정의하려면 2개의 공백 (스페이스 ) 으로 들여쓰기해서 상위 항목과 구분함.

도커 컴포즈는 기본적으로 현재 또는 상위 디렉터리에 yml 파일을 찾아서 컨테이너를 생성한다.
docker-compose 명령어의 -f 옵션을 사용하면 yml 파일의 위치와 이름을 지정할 수 있음.

 

docke-compose -f /home/docker/my_compose-file.yml up -d

 

1. 버전정의
도커 컴포즈 버전 1.10에서 사용할 수 있는 버전ㄴ 3을 기준으로 실습해보자 버전항목은 일반적으로 yaml
파일의 맨 윗부분에 명시된다.
version '3.0'

2.서비스정의
서비스는 도커 컴포즈로 생성할 컨테이너 옵션을 정의한다. 이항목에 쓰인 가 서비스는 컨테이너로 구현되며,
하나의 프로젝트로서 도커 컴포즈에 의해 관리된다.

services
 my_container_1:
    image......
 my_container_2:
    image.......
-image: 서비스의 컨테이너를 생성할 때 쓰일 이미지의 이름을 설정한다.

-links:docker run 명령어의 --env , -e 옵션과 동일하다. 서비스 컨테이너 내부에서 사용할
환경변수를 지원하며, 딕션너리나 배열 형태로 사용한다.

services:
 web:
   environment:
       -MYSQL_ROOT_PASSWORD=mypassword
       -MYSQL_DATABASE_NAME=mydb
         또는
        MYSQL_ROOT_PASSWORD:mypassword
        MYSQL_DATABASE_NAME:mydb
-command:컨네이너가 실행될때 수행할 명령어를 설정하며, 
docker run 명령어의 마지막에 붙는 커멘드와 같다 Dockerfile의 run 과 같은 배열형태로도 사용할 수 있다.

 

service:
 web:
    image:joeng/comosetest:web
    command:apachectl-DFOREGROUND
    또는
    image:joeng/comosetest:web
    command:[apachectl, -DFOREGROUND

 

 

-depends_on: 특정 컨테이너에 대한 의존 관계를 나타내며,이 항목에 명시된 컨테이너가 먼저  생성되고
실행된다. 다음 예제에서는 web 보다 mysql 컨테이너가 먼저 생성된다.

services:
 web:
    image:joeng/comosetest:web
    depens_on
 mysql
    image:joeng/comosetest:mysql

특정 서비스의 컨테이너만 생성하되 의존성이 없는 컨테이너를 생성하려면 --no-deps 옵션을 사용한다.
docker-compose up -no-deps werb

-port:docker run 명령어의 -p 옵션과 같으며 서비스의 컨테이너를 개방할 포트를 설정한다.
그러나 단일호스트 환경에서 80:80 과 같이 호스트의 특정 포트를 서비스의 컨테이너에 연경하면 
docker-compose scale 명령어로 서비스의 컨테이너 수 를 늘릴 수 있다.

services:
  web:
    image:jeong/composetest:web
      ports:
        -"8080"
        -"8081-8085"
        -"80:80"

 

-build:해당 항목에 정의된 도커 파일에서 이미지를 빌드해 서비스 컨테이너를 생성하도록 설정함.
services:
  web:
    build:./composetest
    image:jeong/composetest:web

 

-extends: 다른 yaml 파일이나 현재 yaml 파일에서 서비스 속성을 상속받게 설정함

네트워크 정의
-driverr:도커 컴포즈는 생성된 컨테이너를 위해 기본적으로 브리지 타입의 네트워크를 생성함
그러나 yaml 파일의 driver항목을 정의해서 서비스ㅡ의 컨테이너가 다른 네트워크를 사용 하도록 할 수 있다.
특정 드라이버에 필요한 옵션은 하위 항목인 driver_ops 로 전달됨

version: '3.0'
services:
  myservice:
    image:nginx
    networks:
      -mynetwork
  networks:
   mynetwork:
     driver:overlay
     driver_opts:
       subnet:"255.255.255.0"
       IPAddress:"10.0.0.2"

 

- ipam: IPAM(IP address Manage)를 위해 사용할 수 있는 옵션으로 subnet ,ip 범위 등을 설정할 수 있다.
driver 항목에는 IPAM 을 지원하는 드라이버의 이름을 입력한다.
service:
........
network:
   ipam:
      driver:mydriver
      config
       subnet:172.20.0.0/16
       ip_range:172.20.5/24
       gateway:172.30.5.1

- external: yaml 파일을 통해 프로젝트를 생성할 때마다 네트워크를 생성하는 것이 아닌 기존의 네트워크를 사용
하도록 설정한다.

services:
   web:
    image:jeong/composetest:web
    networks:
      -jeong_network
    networks:
      jeong_network
       external:true

 

4.볼륨 정의

- driver: 볼륨을 생성할 때 사용될 드라이버를 설정한다. 어떠한 설정도 하지않으면 local 로 지정된다.

version: '3.0'
servicer:
.......
volumes:
   driver:flocker
     driver_opts:
        opt:"1"
        opt:2

- external: 도커 컴포즈는 yaml 파일에서 volumes-from 옵션 등을 사용하면 프로젝트 마다 볼륨을 생성한다.
이때 external 옵션 을 설정하면 프로젝트를 생성할 때마다 볼륨을 생성하지 않고 기존 볼륨을 사용하도록 설정한다.
myvolume 이라는 볼륨을 web 서비스 컨테이너에 마운트 한다.

services:
  web:
    image:jeong/composetest:web
    volumes:
     -myvolume:/var/www/html
volumes:
  myvolume:
    external:true

 

5. yaml 파일 검증하기
docker-compose -f (yml 파일경로) config 형태
-> docker-compose config

'리눅스 > docker' 카테고리의 다른 글

도커 볼륨 공유하기  (0) 2021.09.15
도커 이미지를 도커 허브에 배포하고 다운받기  (0) 2021.09.12
도커 스웜 노드 다루기  (0) 2021.02.11
도커 swarm  (0) 2021.02.05
도커 이미지 배포  (0) 2021.02.03