概要
CentOS7上にdocker-composeの実行環境を作ってみたメモ。
db,web,web2の3つのコンテナを作成し、web2コンテナからdbコンテナへリンクさせます。
関連記事
この記事の内容に、リバースプロキシとロードバランシングの機能を加えたものは下記。
docker-compose + リバースプロキシ + ロードバランシングの環境構築手順メモ
環境
- CentOS 7.1
- docker-engine (Docker 1.12.3)
- docker-compose 1.8.1
docker-engine, docker-composeのインストール
下記を参照
docker(docker-engine), docker-composeのインストール
docker-compose.ymlの作成
作成したいコンテナの情報をdocker-compose.ymlに記述します。
今回は、db,web,web2の3つのコンテナを作成します。
役割は下記の通りです。
コンテナ名 | 役割 | リンク先 | イメージ元 |
---|---|---|---|
db | dbサーバ | - | 既存のmysql:latest |
web | webサーバ | - | 既存のnginx:latest |
web2 | webサーバ | db | 自作のDockerfileをbuild |
今回は、各種ファイルをホームディレクトリの直下に作成していますが、他の場所でも構いません。
ディレクトリ構成は適宜変更してください。
docker-compose.yml
docker-compose.ymlを作成
$ vi ~/docker-compose.yml
db:
image: mysql:latest
environment:
MYSQL_DATABASE: sample_db
MYSQL_USER: sample
MYSQL_PASSWORD: sample_password
MYSQL_ROOT_PASSWORD: sample_root_password
web:
image: nginx:latest
# パスをボリュームとしてマウント {ホスト側:コンテナ側}
volumes:
- ./nginx:/usr/share/nginx/html
ports:
- 8080:80
web2:
build: ./web
# リンク先コンテナ {コンテナ名:エイリアス名}
links:
- db:db-server
ports:
- 8081:80
「web」コンテナに設置するファイルの作成
index.htmlの作成
$ mkdir ~/nginx
$ vi ~/nginx/index.html
Hello, docker-compose from index.html:8080.
「web2」コンテナ用のDockerfile、設置するファイルの作成
Dockerfileの作成
$ mkdir ~/web
$ vi ~/web/Dockerfile
FROM centos:7
MAINTAINER Iam <xxxx@xxxx.xx>
RUN yum install -y http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx
RUN yum install -y http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
RUN yum install -y mysql-community-client
ADD index.html /usr/share/nginx/html/
ADD sample.html /usr/share/nginx/html
ENTRYPOINT /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
Dockerfileの内容を変更した場合はリビルドが必要
index.htmlの作成
$ vi ~/web/index.html
Hello, docker-compose from index.html:8081.
sample.htmlの作成
$ vi ~/web/sample.html
Hello, docker-compose from sample.html:8081.
コンテナの起動
docker-compose.ymlに書かれたコンテナを起動する
$ docker-compose up -d
ビルドもする場合
$ docker-compose up -d --build
動作確認
webページの表示確認
それぞれhtmlの内容が取得できるか確認
$ curl localhost:8080
Hello, docker-compose from index.html:8080.
$ curl localhost:8081
Hello, docker-compose from index.html:8081.
$ curl localhost:8081/sample.html
Hello, docker-compose from sample.html:8081.
dbコンテナとリンクしているか確認
web2
今回dbコンテナにリンクさせたweb2コンテナに入り、mysqlコマンドでdbコンテナに接続できるか確認。
web2コンテナに入る
$ docker exec -it {web2のコンテナID} bash
envコマンドで、dbコンテナへの接続情報を取得
# env | grep DB_SERVER_PORT_3306_TCP_ADDR
DB_SERVER_PORT_3306_TCP_ADDR=172.17.0.2
mysqlコマンドで、dbコンテナへ接続
# mysql -u sample -p -h $DB_SERVER_PORT_3306_TCP_ADDR sample_db
Enter password: sample_passowrd
コンテナの停止と削除
コンテナの停止、また停止したコンテナの削除を行う
$ docker-compose down
以上
[参考]
そろそろDockerを始めないとやばいと思い始めたあなたへ
Docker Compose - docker-compose.yml リファレンス
docs.docker.com