도커 컴포즈
하나의 서비스를 위해 여러 컨테이너가 필요할 때(DB, 서버 등..)
한번 구축하기 위해 여러번 명령어를 써야만함.
docker-compose 를 통해 이걸 한번에 관리할 수 있다.
도커 컴포즈 설치
root@k8s-node1:~# curl -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 100 8052k 100 8052k 0 0 1512k 0 0:00:05 0:00:05 --:--:-- 2134k root@k8s-node1:~# chmod +x /usr/local/bin/docker-compose root@k8s-node1:~# docker-compose -v docker-compose version 1.11.0, build 6de1806
url -L https://github.com/docker/compose/releases/download/1.11.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
도커컴포즈는 yaml 파일을 읽는다. (yml)
1) yml 파일 작성
root@k8s-node1:~/dockerCompose# vi docker-compose.yml version: '3.0' services: server_web: image: nginx:1.21 ports: - "80:80" server_db: image: redis:5
들여쓰기로 구분(스페이스 두번)
version = yaml 파일 포맷 버전 (도커 컴포즈와 호환성이 맞는 버전이 있음)
services = 컨테이너 묶어놓는 단위
server_web , server_db = 생성될 서비스의 이름
root@k8s-node1:~/dockerCompose# docker-compose up -d Creating network "dockercompose_default" with the default driver Pulling server_db (redis:5)... 5: Pulling from library/redis e9995326b091: Pull complete f2cd78d6f24c: Pull complete 8f3614d34c89: Pull complete a9c5d537deea: Pull complete 82aa9c8f3f00: Pull complete 6453e701d8ee: Pull complete Digest: sha256:c7092cb213ccc98f8ccb1c5b479a3535c4d6f51ef6f3748934749575cf24f170 Status: Downloaded newer image for redis:5 Pulling server_web (nginx:1.21)... 1.21: Pulling from library/nginx 42c077c10790: Pull complete 62c70f376f6a: Pull complete 915cc9bd79c2: Pull complete 75a963e94de0: Pull complete 7b1fab684d70: Pull complete db24d06d5af4: Pull complete Digest: sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514 Status: Downloaded newer image for nginx:1.21 Creating dockercompose_server_db_1 Creating dockercompose_server_web_1
docker-compose.yml 파일이 있는 위치에서
docker-compose up -d 커맨드 입력하면 된다.
root@k8s-node1:~/dockerCompose# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 99fc76d2f4a3 nginx:1.21 "/docker-entrypoint.…" 45 seconds ago Up 35 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp dockercompose_server_web_1 4e41617ef85e redis:5 "docker-entrypoint.s…" 45 seconds ago Up 35 seconds 6379/tcp dockercompose_server_db_1 root@k8s-node1:~/dockerCompose# docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------- dockercompose_server_db_1 docker-entrypoint.sh redis ... Up 6379/tcp dockercompose_server_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
잘 떴는지 확인
도커 컴포즈 대략적인 구성은
프로젝트 – 서비스 – 컨테이너 로 되어 있고
프로젝트는 docker-compose.yml 이 존재하는 디렉토리 명 (이 경우에는 dockerCompse 가 된다)
서비스 이름 : server_web, db
그 아래 컨테이너(서비스 아래 여러 컨테이너가 존재할 수 있음) 번호로 구성
scale 명령어로 아래 컨테이너를 확장할 수 있다.
root@k8s-node1:~/dockerCompose# docker-compose scale server_db=3 Creating and starting dockercompose_server_db_2 ... done Creating and starting dockercompose_server_db_3 ... done root@k8s-node1:~/dockerCompose# docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------------- dockercompose_server_db_1 docker-entrypoint.sh redis ... Up 6379/tcp dockercompose_server_db_2 docker-entrypoint.sh redis ... Up 6379/tcp dockercompose_server_db_3 docker-entrypoint.sh redis ... Up 6379/tcp dockercompose_server_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp
root@k8s-node1:~/dockerCompose# docker-compose down Stopping dockercompose_server_db_3 ... done Stopping dockercompose_server_db_2 ... done Stopping dockercompose_server_web_1 ... done Stopping dockercompose_server_db_1 ... done Removing dockercompose_server_db_3 ... done Removing dockercompose_server_db_2 ... done Removing dockercompose_server_web_1 ... done Removing dockercompose_server_db_1 ... done Removing network dockercompose_default
down 명령어로 종료가 가능하다.
기본적으로 디렉토리 명이 프로젝트인데,
docker-compose -p myproject up -d
처럼 -p ${프로젝트명} 을 입력하여 명령어를 날리면 ( docker-compose [-p ${프로젝트명}] ~명령어~ )
해당 프로젝트명을 가진 서비스들이 실행된다. (또는 종료 및 ps 등 기타 명령어도 사용가능)
기타 옵션들 설명
services: web: ... links: # docker run --link 와 같음. 다른 서비스에 서비스명으로 접근 가능 - db:database - mysql ... command: apachectl -DFOREGROUND # [apachectl, -DFOREGROUND] # docker run 맨 뒤에 붙는 커맨드와 같음. 컨테이너가 시작시 명령어 수행 ... depeonds_on # 인자값으로 들어간 컨테이너 이후에 실행됨 (mysql부터 실행) - mysql mysql: ... environment: #docker run --env, -e 와 같음. 내부에서 사용할 환경변수 지정 -MYSQL_ROOT_PASSWORD=mypassword ...
그 외에 옵션을 상속받게 해주는 extend, Dockerfile 빌드해주는 build 등 이있다.
서비스 외에
볼륨, 네트워크 설정을 yml 파일에서 설정해줄 수 있다.