도커 컴포즈
하나의 서비스를 위해 여러 컨테이너가 필요할 때(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 파일에서 설정해줄 수 있다.
'IT 공부 > PaaS' 카테고리의 다른 글
[k8s] 쿠버네티스 기초 사용방법 (1) | 2022.12.19 |
---|---|
[k8s] 쿠버네티스 설치 (0) | 2022.11.02 |
[Docker] 도커 모니터링 (0) | 2022.10.31 |
[Docker] Dockerfile 도커파일 옵션 2 (0) | 2022.10.27 |
[Docker] DockerFile 도커파일 1 (0) | 2022.10.26 |