본문 바로가기
반응형

도커 컴포즈 

 

하나의 서비스를 위해 여러 컨테이너가 필요할 때(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 파일에서 설정해줄 수 있다.

728x90
반응형

'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

한걸음 한걸음

개인적인 기록