본문 바로가기

가상화/Kubernetes

[Docker] docker-compose 활용

반응형

개요

docker-compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기위한 도구입니다. Compose에서는 YAML 파일을 사용하여 애플리케이션 서비스를 구성합니다. 그런 다음 단일 명령으로 구성에서 모든 서비스를 작성하고 시작합니다. 

구성환경

docker-19.3 , docker-compse-1.18

 

Docker-compose 를 사용하기 위해서는 Docker-compose를 설치해야한다. 설치 방법은 아래와 같다.

1. 설치

shell> yum install docker-compose  : centos
shell > apt install docker-compose  : debian/ubuntu

 

Docker-compose를 사용 전후를 한번 비교해보도록 하자.

아래는 docker run으로  2개의 애플리케이션 서비스를 생성하는 과정이다.

shell> docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
shell> docker run -itd -p 8000:80 -e WORDPRESS_DB_HOST=some-mysql:3306 --name wordpress wordpress:latest

mysql의 포트옵션을 변경하려면

1. mysql 컨테이너를 중지시킨다ㅏ.
2. mysql 컨테이너의 디렉토리에서 config.v2.json 파일에서 파일을 수정한다. 
3. 컨테이너를 재시작한다.

음.. 하나정도야 괜찮다. 그럼 2개 이상의 컨테이너를 변경할려면 위 과정을 두번이상 해야 된다는 말이다. 중간에 빌드 과정까지 있다면 너무 많은 시간을 투자해야 한다. 정말 귀찮기 짝이 없다. 이런 과정을 한번의 명령어로 해주는 것이 docker-compose 라고 이해하면 쉬울 것이다.

그럼 docker-compose 이용해서 컨테이너를 만들어 보자.

- docker-compose.yaml 샘플

version: '3.1'

services:

# mysql db 서비스 정의
   db:
     image: mysql:8.0.19
     command: --default-authentication-plugin=mysql_native_password
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: my-secret-pw
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
     ports:
       - "3306:3306"
     volumes:
       - ./data:/var/lib/mysql

# wordpress 앱 서비스 정의
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress

docker-compose 명령은 docker-compose.yaml 파일이 있는 위치에서 실행한다.

컨테이너 실행( -d 옵션 : 데몬으로 실행)

shell> docker-compose up -d
Creating mysql_db_1         ... done 
Creating mysql_db_1         ... 
Creating mysql_wordpress_1 ... done 
shell>

생성(실행)된 컨테이너 확인

 shell> docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
4e810273606d        wordpress:latest    "docker-entrypoint.s…"   43 minutes ago      Up 43 minutes       0.0.0.0:8000->80/tcp                mysql_wordpress_1
4a310dbfdea3        mysql:8.0.19        "docker-entrypoint.s…"   43 minutes ago      Up 43 minutes       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql_db_1

shell>  docker-compose ps
      Name                     Command               State                 Ports
----------------------------------------------------------------------------------------------
mysql_db_1          docker-entrypoint.sh --def ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
mysql_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8000->80/tcp
shell>

docker-compse.yaml 파일에 정의된 모든 컨테이너를 중지할려면

shell> docker-compose stop
Stopping mysql_wordpress_1 ... done
Stopping mysql_db_1         ... done
shell>

docker-compse.yaml 파일에 정의된 모든 컨테이너를 삭제할려면

shell> docker-compose rm
Going to remove mysql_wordpress_1, mysql_db_1
Are you sure? [yN] y
Removing mysql_wordpress_1 ... done
Removing mysql_db_1         ... done
shell>

mysql의  포트를 변경하고자 한다면 docker-compose.yaml 파일에서 수정후 docker-compose up -d 만 실행하면 간단하게 포트를 변경할 수가 있다.

shell> docker-compose up -d
Recreating mysql_db_1 ... done
Recreating mysql_wordpress_1 ... done
shell>

 

반응형