Upload
masayuki-hokimoto
View
57
Download
0
Embed Size (px)
Citation preview
自己紹介
ほきもと まさゆき(30歳)
リコーITソリューションズ(株) (8年目)
Twitter : @oh_rusty_nail
docker歴 : 6か月
発表内容は初心者向け(10minくらい)
発表までの学習時間は2週間くらい
とっとるびーで発表するのは第12回(2013/05)ぶり
自己紹介
はじめに
インストール
http://qiita.com/taroshin/items/22bb360b18a0a24871dd
その書き方対応してません!と早速怒られた
docker-composeとは
docker-composeとは
$ docker run …
mysql
$ docker run …
nginx
$ docker run …
app
$ docker run …
redis
docker-composeとは
$ docker-compose up
docker-composeとは
•複数のコンテナをコード(docker-compose.yml)で管理する
•コンテナの同時起動/停止
•コンテナのスケール
docker-compose.yml
http://docs.docker.jp/compose/overview.html
http://docs.docker.jp/compose/compose-file.html (リファレンス)
docker-compose コマンド
$ docker-compose up
container
Ex) $ docker-compose up [ -d ]
docker hub
Dockerfilebuild
pull
container
image
network
$ docker-compose build
container
image
Dockerfile
Ex) $ docker-compose build
build
$ docker-compose create
container
docker hub
Ex) ($ docker network create --driver bridge xxx_default)
container
image
Dockerfilebuild
pull
ネットワークが構築されていないとコンテナは作られない
作られたコンテナは起動していない
$ docker-compose create
network
$ docker-compose start
container
START
Ex) $ docker-compose start
停止されたコンテナを起動する
新しいコンテナは作られない
docker hub
container
image
Dockerfilebuild
pull
network
$ docker-compose stop
container
STOP
Ex) $ docker-compose stop
docker hub
Dockerfilebuild
pull
container
image
network
$ docker-compose rm
container
Ex) $ docker-compose rm
docker hub
Dockerfilebuild
pull
container
image
コンテナが停止されていないと
コンテナは削除できない
network
$ docker-compose down
container
(--rmi all オプション)
STOP
Ex) $ docker-compose down [ --rmi all ]
docker hub
Dockerfilebuild
pull
container
image
network
$ docker-compose run
container
Ex) $ docker-compose run web rails s
docker hub
Dockerfilebuild
pull
container
image
実際には $ docker run –ti
を処理している
network
$ docker-compose scale
container
container
container
Ex) $ docker-compose scale web=3
docker hub
Dockerfilebuild
pull
container
image
network
docker-composeを使ってみる
今回やってみたこと
E2Eの自動テストを行うための環境数分で構築してみる
https://github.com/RustyNail/selenium_grid_docker-compose
docker-compose Selenium Grid
×
Selenium Gridとは
• 複数のSeleniumの実行環境を管理し、並列にテストを実行できるツール
• 1つのテストスクリプトを複数環境に対して並行して実行できる
• テストの実行時間を大幅に短縮することが可能
• Selenium Gridの構成
• Hub ・・・ テストスクリプトを受け付けるサーバー
• Node ・・・ 実際にテストを実行する環境
コンテナの構成
• 以下4つのコンテナで構成する
• hub (Selenium Grid)
• node_firefox (Firefoxのノード)
• node_chrome (Chromeのノード)
• test (Seleniumでスクショをとるスクリプト)
docker-compose.yml Dockerfile
screenshot.rb
wait-for-it.sh
$ docker-compose up$ docker-compose run
Selenium Grid
$ bundle exec ruby screenshot.rb
• スクリーションショットが撮れている• (日本語フォントをいれていないのでトウフになっている)
$ docker-compose scale
$ docker-compose scale
• 指定した台数に増加
• 並列実行環境を構築できる
linksとdepends_on似てる?
• version 1とversion 2で違いがあった。以下はversion 1の場合
• depends_on
• コンテナの作成順序と依存関係を決めるもの
• links
• depends_onの機能に加えて、[エイリアス名](または[サービス名])を使用してコンテナに
アクセスできるようにする
• links
• 他のサービスをコンテナにリンクさせる• サービス名に別名をつける場合はservice:aliasの形式で指定する
• 別名を省略した場合は、サービス名がそのまま別名として使われる• version 1:他のコンテナからサービス名を使って接続することができなかった
• linksで紐付けする必要があった
• version 2:composeファイルに書いた全てのサービス間に自動的にリンクを張る仕様になった
• linksとわざわざ書く必要がなくなった
linksとdepends_on似てる?
• depends_on
• コンテナを立ち上げる順番を決める• コンテナが起動する順番を指定しても、起動完了まで待ってくれない• 接続したいデータベースが準備できていないのに、先にWEBアプリが立ち上がるという問題も起こりうる
linksとdepends_on似てる?
はまったこと ~linksに書いても/etc/hostsに反映されない~
• 名前解決をさせたい
• ググルとlinksに書くと/etc/hostsに反映されるという記事が結構ある
• linksに書いたが、/etc/hostsを見ても書き込まれない・・・
• バージョンが古い(1.4系)とその現象が起きたという記事はあった
• けど、今のバージョンは1.11.2(最新)
はまったこと ~linksに書いても/etc/hostsに反映されない~
https://github.com/docker/compose/issues/2841
https://blog.docker.com/2016/02/docker-1-10/
名前解決のためのDNSサーバ:ホスト名の検索は、 /etc/hostsではなくDNSサーバで行われるため、
より信頼性とスケーラビリティが向上します。
http://docs.docker.jp/engine/userguide/networking/configure-dns.html
• docker network inspect
[ネットワーク名]
結論
• port is already allocatedと言われる
• コンテナの削除やdockerの再起動をしたがダメだった
はまったこと2 ~dockerでゾンビ化したポートを開放する~
はまったこと2 ~dockerでゾンビ化したポートを開放する~
• コンテナの利用していたポートを掴んだまま
終了して、コンテナ再起動時にエラーになる
ことがあるらしい
• 通常はdockerの再起動でポートが解放される
• ファイルを削除 & docker再起動で解決! ⇒
https://unicorn.limited/jp/item/707
おわりに
まとめ
• docker / docker-compose お手軽!すごい便利!
• 基本docker-compose up でいい感じにできるけど、リファレンスをちゃんとみたほうがいい
• まず、docker hubにないか探してみるべし
http://qiita.com/ootaken/items/26d37cb34d3b575277e0