#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|