- 追加された行はこの色です。
- 削除された行はこの色です。
#author("2018-08-31T09:00:08+09:00","","")
[[CentOS7]]
*Docker : Docker Compose を利用する [#ydc7ddc7]
Docker Compose をインストールすると、複数コンテナーの定義や実行が容易に可能となります。
Docker Compose をインストールします。
|BGCOLOR(black):COLOR(white):|c
|&color(lightpink){# EPELからインストール};|
|[root@localhost ~]# yum --enablerepo=epel -y install python2-pip|
|[root@localhost ~]# pip install docker-compose|
例として、Apache httpd が稼働するコンテナーと MariaDB が稼働するコンテナーを同時に起動する場合の設定です。
|BGCOLOR(black):COLOR(white):|c
|&color(lightpink){# httpd が起動するコンテナーを定義};|
|[root@localhost ~]# vi Dockerfile|
|FROM centos &br; MAINTAINER ServerWorld <admin@hoge.com> &br; &br; RUN yum -y update &br; RUN yum -y install httpd &br; &br; EXPOSE 80 &br; CMD ["/usr/sbin/apachectl", "-D", "FOREGROUND"] &br; &br; |
|&color(lightpink){# アプリケーションの構成を定義};|
|[root@localhost ~]# vi docker-compose.yml|
|version: '3' &br; services: &br; db: &br; image: mariadb &br; volumes: &br; - /var/lib/docker/disk01:/var/lib/mysql &br; environment: &br; MYSQL_ROOT_PASSWORD: password &br; MYSQL_USER: centos &br; MYSQL_PASSWORD: password &br; MYSQL_DATABASE: centos_db &br; ports: &br; - "3306:3306" &br; web: &br; build: . &br; ports: &br; - "80:80" &br; volumes: &br; - /var/lib/docker/disk02:/var/www/html &br; &br; |
|&color(lightpink){# SELinux 有効の場合は Enforcing 以外に設定};|
|[root@localhost ~]# setenforce 0|
|&color(lightpink){# アプリケーションをビルド/実行};|
|[root@localhost ~]# docker-compose up -d|
|Building web &br; Step 1/6 : FROM centos &br; Trying to pull repository docker.io/library/centos ... &br; latest: Pulling from docker.io/library/centos &br; 256b176beaff: Download complete &br; ..... &br; ..... &br; Creating root_web_1 ... &br; Creating root_db_1 ... &br; Creating root_web_1 ... done &br; Creating root_db_1 ... done|
|[root@localhost ~]# docker ps|
|CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES &br; 06ece319c627 mariadb "docker-entrypoint..." 20 seconds ago Up 18 seconds 0.0.0.0:3306->3306/tcp root_db_1 &br; 1f3796c137f3 root_web "/usr/sbin/apachec..." 20 seconds ago Up 18 seconds 0.0.0.0:80->80/tcp root_web_1|
|&color(lightpink){# アクセス確認};|
|[root@localhost ~]# mysql -h 127.0.0.1 -u root -p -e "show variables like 'hostname';"|
|Enter password: &br; +---------------+--------------+ &br; | Variable_name | Value | &br; +---------------+--------------+ &br; | hostname | 06ece319c627 | &br; +---------------+--------------+|
|[root@localhost ~]# mysql -h 127.0.0.1 -u centos -p -e "show databases;"|
|Enter password: &br; +--------------------+ &br; | Database | &br; +--------------------+ &br; | centos_db | &br; | information_schema | &br; +--------------------+|
|[root@localhost ~]# echo "Hello Docker Compose World" > /var/lib/docker/disk02/index.html|
|[root@localhost ~]# curl localhost|
|Hello Docker Compose World|
Docker Compose その他の基本的な操作です。
|BGCOLOR(black):COLOR(white):|c
|&color(lightpink){# アプリケーションを構成するコンテナーの状態確認};|
|[root@localhost ~]# docker-compose ps|
| Name Command State Ports &br;
---------------------------------------------------------------------------- &br;
root_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp &br;
root_web_1 /usr/sbin/apachectl -D FOR ... Up 0.0.0.0:80->80/tcp &br; |
|&color(lightpink){# アプリケーションを構成するコンテナーのログ確認};|
|[root@localhost ~]# docker-compose logs|
|Attaching to root_db_1, root_web_1 &br; web_1 | Passing arguments to httpd using apachectl is no longer supported. &br; web_1 | You can only start/stop/restart httpd using this script. &br; ..... &br; ..... &br; db_1 | 2018-08-28 2:35:54 0 [Note] Added new Master_info '' to hash table &br; db_1 | 2018-08-28 2:35:54 0 [Note] mysqld: ready for connections. &br; 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 &br; |
|&color(lightpink){# アプリケーションを構成するコンテナーでコマンド実行};|
|&color(lightpink){# コンテナー名は [docker-compose.yml] で指定した名称};|
|[root@localhost ~]# docker-compose exec db /bin/bash|
|root@06ece319c627:/# &br; |
|&color(lightpink){# アプリケーションを終了し、構成するコンテナーを全て停止};|
|[root@localhost ~]# docker-compose stop|
|Stopping root_web_1 ... done &br; Stopping root_db_1 ... done &br; |
|&color(lightpink){# アプリケーションに定義したサービスを個別に起動};|
|&color(lightpink){# 依存関係を設定している場合は依存コンテナーも同時に起動};|
|[root@localhost ~]# docker-compose up -d web|
|Stopping root_db_1 ... &br; Stopping root_web_1 ... &br; Stopping root_db_1 ... done &br; Stopping root_web_1 ... done|
|[root@localhost ~]# docker-compose ps|
| Name Command State Ports &br;
-------------------------------------------------------------- &br;
root_db_1 docker-entrypoint.sh mysqld Exit 0 &br;
root_web_1 /usr/sbin/apachectl -D FOR ... Exit 137 &br; |
|&color(lightpink){# アプリケーションに関連するコンテナーを全て削除 &br; # 起動中のコンテナーは削除しない}; &br; |
|[root@localhost ~]# docker-compose rm|
|Going to remove root_db_1, root_web_1 &br; Are you sure? [yN] y &br; Removing root_db_1 ... done &br; Removing root_web_1 ... done|