본문 바로가기

카테고리 없음

Docker : Docker Compose를 이용

Docker Compose를 설치하면 여러 컨테이너의 정의와 실행이 쉽게 가능합니다.

 

1.Docker Compose를 설치합니다.

# EPEL 에서 설치

[root @ dlp ~] # yum --enablerepo = epel -y install python2-pip

[root @ dlp ~] # pip install docker-compose

 

2.예를 들어, Apache httpd를 실행하는 컨테이너와 MariaDB를 실행하는 컨테이너를 동시에 실행하는 경우의 설정입니다.

# httpd를 실행하는 컨테이너를 정의

[root @ dlp ~] # vi Dockerfile

FROM centos

MAINTAINER ServerWorld <admin@srv.world>

 

RUN yum -y update

RUN yum -y install httpd

 

EXPOSE 80

CMD [ "/ usr / sbin / apachectl", "-D", "FOREGROUND"]

 

# 응용 프로그램의 구성을 정의

[root @ dlp ~] # vi docker-compose.yml

version : '3'

services :

  db :

    image : mariadb

    volumes :

      - / var / lib / docker / disk01 : / var / lib / mysql

    environment :

      MYSQL_ROOT_PASSWORD : password

      MYSQL_USER : centos

      MYSQL_PASSWORD : password

      MYSQL_DATABASE : centos_db

    ports :

      - "3306 : 3306 "

  web :

    build :.

    ports :

      -"80:80 "

    volumes :

      - / var / lib / docker / disk02 : / var / www / html

 

# SELinux 활성화되면 Enforcing 이외로 설정

[root @ dlp ~] # setenforce 0

# 응용 프로그램을 빌드 / 실행

[root @ dlp ~] # docker-compose up -d

Building web

Step 1/6 : FROM centos

Trying to pull repository docker.io/library/centos ...

latest : Pulling from docker.io/library/centos

256b176beaff : Download complete

.....

.....

Creating root_web_1 ...

Creating root_db_1 ...

Creating root_web_1 ... done

Creating root_db_1 ... done

 

[root @ dlp ~] # docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

06ece319c627 mariadb "docker-entrypoint ..."20 seconds ago Up 18 seconds 0.0.0.0:3306->3306/tcp root_db_1

1f3796c137f3 root_web "/ usr / sbin / apachec ..."20 seconds ago Up 18 seconds 0.0.0.0:80->80/tcp root_web_1

 

# 액세스 확인

[root @ dlp ~] # mysql -h 127.0.0.1 -u root -p -e "show variables like 'hostname';"

Enter password :

+ --------------- + -------------- +

| Variable_name | Value |

+ --------- ------ + -------------- +

| hostname | 06ece319c627 |

+ --------------- + ------ -------- +

 

[root @ dlp ~] # mysql -h 127.0.0.1 -u centos -p -e "show databases;"

Enter password :

+ -------------------- +

| Database |

+ -------------------- +

| centos_db |

| information_schema |

+ -------------------- +

 

[root @ dlp ~] # echo "Hello Docker Compose World"> /var/lib/docker/disk02/index.html

[root @ dlp ~] # curl localhost

Hello Docker Compose World

 

3. Docker Compose 기타 기본적인 작업입니다.

# 응용 프로그램을 구성하는 컨테이너의 상태 확인

[root @ dlp ~] # docker-compose ps

   Name Command State Ports

---------------------------------------------- ------------------------------

root_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp

root_web_1 / usr / sbin / apachectl -D FOR ... Up 0.0.0.0:80->80/tcp

 

# 응용 프로그램을 구성하는 컨테이너의 로그 확인

[root @ dlp ~] # docker-compose logs

Attaching to root_db_1, root_web_1

web_1 | Passing arguments to httpd using apachectl is no longer supported.

web_1 | You can only start / stop / restart httpd using this script.

.....

.....

db_1 | 2018-08-28 2:35:54 0 [Note] Added new Master_info ''to hash table

db_1 | 2018-08-28 2:35:54 0 [Note] mysqld : ready for connections.

db_1 | Version : '10 .3.9-MariaDB- 1 : 10.3.9 + maria ~ bionic 'socket :'/var/run/mysqld/mysqld.sock 'port : 3306 mariadb.org binary distribution

 

# 응용 프로그램을 구성 컨테이너에서 명령 실행

# 컨테이너 이름은 [docker-compose.yml에서 지정한 명칭

[root @ dlp ~] # docker-compose exec db / bin / bash

root @ 06ece319c627 : / #

 

# 응용 프로그램을 종료하고 구성 컨테이너를 모두 정지

[root @ dlp ~] # docker-compose stop

Stopping root_web_1 ... done

Stopping root_db_1 ... done

 

# 응용 프로그램에 정의 된 서비스를 개별적으로 시작

# 종속성을 설정하는 경우는 의존 컨테이너도 동시에 시작

[root @ dlp ~] # docker-compose up -d web

Stopping root_db_1 ...

Stopping root_web_1 ...

Stopping root_db_1 ... done

Stopping root_web_1 ... done

[root @ dlp ~] # docker-compose ps

   Name Command State Ports

---------------------------------------------- ----------------

root_db_1 docker-entrypoint.sh mysqld Exit 0

root_web_1 / usr / sbin / apachectl -D FOR ... Exit 137

 

# 응용 프로그램에 대한 컨테이너를 모두 삭제

# 실행중인 컨테이너를 삭제하지

[root @ dlp ~] # docker-compose rm

Going to remove root_db_1, root_web_1

Are you sure? [yN] y

Removing root_db_1 ... done

Removing root_web_1 ... done