Dockerを使ってみる Docker Compose編
概要
複数のコンテナを一元管理する、DockerComposeを使ってみる
参考書籍
プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
- 作者: 阿佐志保,山田祥寛
- 出版社/メーカー: 翔泳社
- 発売日: 2015/11/20
- メディア: 大型本
- この商品を含むブログ (3件) を見る
# やってみる
Docker コンテナ間のリンク
$ docker run --link 接続したいコンテナ名:エイリアス名 イメージ名 実行コマンド
- 試しに、postgresを公式イメージを元に生成してみる。
$ docker run -d --name dbserver postgres # 名前をdbserver のコンテナを起動
- 次に、appserver という名前をつけたコンテナを起動してみる。起動の時に、--linkを使うと、リンク先へのリンクができる。
$ docker run -it --name appserver --link dbserver:pg centos /bin/bash
[root@2822dccd7038 /]# set |grep PG PG_ENV_GOSU_VERSION=1.7 PG_ENV_LANG=en_US.utf8 PG_ENV_PGDATA=/var/lib/postgresql/data PG_ENV_PG_MAJOR=9.6 PG_ENV_PG_VERSION=9.6.1-1.pgdg80+1 PG_ENV_no_proxy='*.local, 169.254/16' PG_NAME=/appserver/pg PG_PORT=tcp://172.17.0.3:5432 PG_PORT_5432_TCP=tcp://172.17.0.3:5432 PG_PORT_5432_TCP_ADDR=172.17.0.3 PG_PORT_5432_TCP_PORT=5432 PG_PORT_5432_TCP_PROTO=tcp
Docker Composeをinstallしてみる。
以下で最新版がinstallできる。
curl -L https://github.com/docker/compose/releases/download/1.9.0-rc2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose
とりあえず、現時点の最新版をinstallしてみた
docker-compose.ymlの構文
例文:
# Webサーバの設定 webserver: image: httpd:latest ports: - "8000:80" # ホスト8000バンポートをコンテナ80に転送 # APサーバの設定 apserver: build: . #Dockerfileを指定 # image かbuildのどちらかを必ず指定する。
コンテナ内で動かすコマンド指定(command)
command: /bin/bash
コンテナ間リンク連携(links/external_links)
links: - dbserver - dbserver:mysql # エイリアスの設定 external_links: # docker-compose内に定義のない、外部の別コンテナとリンク機能を使って連携する時に指定 - redis - project_db:mysql # エイリアスの設定
コンテナ間の通信(ports/expose)
ports: #必ずダブルクオーテーションで囲む(YAMLは、時刻として認識してしまうため) - "3000" - "8000:8000" - "49100:22" - "127.0.0.1:8001:8001"
expose: #ホストマシンに公開せずに、リンク機能を使って連携するコンテナのみポートを後悔する時は、exposeを使う - "3000" - "8000"
コンテナのデータ管理
volumes: #コンテナ内の一部もしくは全部を利用可能な状態にすること->コンテナにボリュームをマウントの意味w - /var/lib/mysql - cache/:/tmp/cache volumes: - ~/configs:/etc/configs/:ro volumes_from: - log # logというコンテナにマウントする
ちなみにマウントの意味は以下の通り
マウントとは、コンピュータに接続した周辺機器や外部記憶装置(あるいは、装置に挿入されたディスクなどの記録メディア)をOSに認識させ、利用可能な状態にすること。
コンテナの環境変数指定(environment)
environment: - HOGE=fuga - FOO environment: HOGE: fuga FOO: # 同一ディレクトリ内に、envfileを用意しておけば、読み込みも可能 env_file: envfile # 複数ファイルの読み込みも可能 env_file: - ./envfile1 - ./app/envfile2 - ./tmp/envfile3
コンテナの情報設定(container_name/labels)
Docker Composeで生成されるコンテナに名前をつける
container_name: web-container # コンテナ名の指定
コンテナにラベルをつけるとき
#配列形式 labels: - "com.expample.description=Accounting webapp" - "com.example.department=Finance" #ハッシュ形式 labels: com.example.description: "Accounting webapp" com.example.department: "Finance"
docker-compose.ymlをGUIで作成できるwebサイト
Docker Composeコマンド
docker-compose コマンド — Docker-docs-ja 1.10.0b ドキュメント
up コンテナの生成・起動 scale 生成するコンテナ数の指定 ps コンテナの一覧表示 run コンテナの実行 kill 実行中のコンテナの強制停止 など
- docker-composeコマンドは、基本的に、docker-compose.ymlを保存したディレクトリで実行
- それ以外の場所にdocker-compose.ymlを配置する場合は、fオプションでファイルパスを指定する。
# docker-compose.ymlを元にコンテナの生成/起動 $ docker-compose -f ./sample/docker-compose.yml up
- サブコマンドの後ろにコンテナ名を指定するとそのコンテナのみを操作できる
docker-compose stop dbserver(コンテナ名)
複数コンテナの生成(up)
$ docker-compose up # これで全部のコンテナを生成・起動できる。 # バックグランド起動 $ docker-compose up -d
生成するコンテナ数の指定(scale)
docker-compose scale [サービス名=数]
$ docker-compose scale serverA=10 serverB=20