Docker compose selenium-grid_tottoruby_25

47

Transcript of Docker compose selenium-grid_tottoruby_25

Page 1: Docker compose selenium-grid_tottoruby_25
Page 2: Docker compose selenium-grid_tottoruby_25

自己紹介

ほきもと まさゆき(30歳)

リコーITソリューションズ(株) (8年目)

Twitter : @oh_rusty_nail

docker歴 : 6か月

発表内容は初心者向け(10minくらい)

発表までの学習時間は2週間くらい

とっとるびーで発表するのは第12回(2013/05)ぶり

自己紹介

Page 3: Docker compose selenium-grid_tottoruby_25

はじめに

Page 4: Docker compose selenium-grid_tottoruby_25
Page 5: Docker compose selenium-grid_tottoruby_25

インストール

Page 6: Docker compose selenium-grid_tottoruby_25

http://qiita.com/taroshin/items/22bb360b18a0a24871dd

その書き方対応してません!と早速怒られた

Page 7: Docker compose selenium-grid_tottoruby_25

docker-composeとは

Page 8: Docker compose selenium-grid_tottoruby_25

docker-composeとは

$ docker run …

mysql

$ docker run …

nginx

$ docker run …

app

$ docker run …

redis

Page 9: Docker compose selenium-grid_tottoruby_25

docker-composeとは

$ docker-compose up

Page 10: Docker compose selenium-grid_tottoruby_25

docker-composeとは

•複数のコンテナをコード(docker-compose.yml)で管理する

•コンテナの同時起動/停止

•コンテナのスケール

Page 11: Docker compose selenium-grid_tottoruby_25

docker-compose.yml

http://docs.docker.jp/compose/overview.html

http://docs.docker.jp/compose/compose-file.html (リファレンス)

Page 12: Docker compose selenium-grid_tottoruby_25

docker-compose コマンド

Page 13: Docker compose selenium-grid_tottoruby_25

$ docker-compose up

container

Ex) $ docker-compose up [ -d ]

docker hub

Dockerfilebuild

pull

container

image

network

Page 14: Docker compose selenium-grid_tottoruby_25

$ docker-compose build

container

image

Dockerfile

Ex) $ docker-compose build

build

Page 15: Docker compose selenium-grid_tottoruby_25

$ docker-compose create

container

docker hub

Ex) ($ docker network create --driver bridge xxx_default)

container

image

Dockerfilebuild

pull

ネットワークが構築されていないとコンテナは作られない

作られたコンテナは起動していない

$ docker-compose create

network

Page 16: Docker compose selenium-grid_tottoruby_25

$ docker-compose start

container

START

Ex) $ docker-compose start

停止されたコンテナを起動する

新しいコンテナは作られない

docker hub

container

image

Dockerfilebuild

pull

network

Page 17: Docker compose selenium-grid_tottoruby_25

$ docker-compose stop

container

STOP

Ex) $ docker-compose stop

docker hub

Dockerfilebuild

pull

container

image

network

Page 18: Docker compose selenium-grid_tottoruby_25

$ docker-compose rm

container

Ex) $ docker-compose rm

docker hub

Dockerfilebuild

pull

container

image

コンテナが停止されていないと

コンテナは削除できない

network

Page 19: Docker compose selenium-grid_tottoruby_25

$ docker-compose down

container

(--rmi all オプション)

STOP

Ex) $ docker-compose down [ --rmi all ]

docker hub

Dockerfilebuild

pull

container

image

network

Page 20: Docker compose selenium-grid_tottoruby_25

$ docker-compose run

container

Ex) $ docker-compose run web rails s

docker hub

Dockerfilebuild

pull

container

image

実際には $ docker run –ti

を処理している

network

Page 21: Docker compose selenium-grid_tottoruby_25

$ docker-compose scale

container

container

container

Ex) $ docker-compose scale web=3

docker hub

Dockerfilebuild

pull

container

image

network

Page 22: Docker compose selenium-grid_tottoruby_25

docker-composeを使ってみる

Page 23: Docker compose selenium-grid_tottoruby_25

今回やってみたこと

E2Eの自動テストを行うための環境数分で構築してみる

https://github.com/RustyNail/selenium_grid_docker-compose

docker-compose Selenium Grid

×

Page 24: Docker compose selenium-grid_tottoruby_25

Selenium Gridとは

• 複数のSeleniumの実行環境を管理し、並列にテストを実行できるツール

• 1つのテストスクリプトを複数環境に対して並行して実行できる

• テストの実行時間を大幅に短縮することが可能

• Selenium Gridの構成

• Hub ・・・ テストスクリプトを受け付けるサーバー

• Node ・・・ 実際にテストを実行する環境

Page 25: Docker compose selenium-grid_tottoruby_25

コンテナの構成

• 以下4つのコンテナで構成する

• hub (Selenium Grid)

• node_firefox (Firefoxのノード)

• node_chrome (Chromeのノード)

• test (Seleniumでスクショをとるスクリプト)

Page 26: Docker compose selenium-grid_tottoruby_25

docker-compose.yml Dockerfile

screenshot.rb

Page 27: Docker compose selenium-grid_tottoruby_25

wait-for-it.sh

Page 28: Docker compose selenium-grid_tottoruby_25

$ docker-compose up$ docker-compose run

Page 29: Docker compose selenium-grid_tottoruby_25

Selenium Grid

Page 30: Docker compose selenium-grid_tottoruby_25

$ bundle exec ruby screenshot.rb

• スクリーションショットが撮れている• (日本語フォントをいれていないのでトウフになっている)

Page 31: Docker compose selenium-grid_tottoruby_25

$ docker-compose scale

Page 32: Docker compose selenium-grid_tottoruby_25

$ docker-compose scale

• 指定した台数に増加

• 並列実行環境を構築できる

Page 33: Docker compose selenium-grid_tottoruby_25
Page 34: Docker compose selenium-grid_tottoruby_25

linksとdepends_on似てる?

• version 1とversion 2で違いがあった。以下はversion 1の場合

• depends_on

• コンテナの作成順序と依存関係を決めるもの

• links

• depends_onの機能に加えて、[エイリアス名](または[サービス名])を使用してコンテナに

アクセスできるようにする

Page 35: Docker compose selenium-grid_tottoruby_25

• links

• 他のサービスをコンテナにリンクさせる• サービス名に別名をつける場合はservice:aliasの形式で指定する

• 別名を省略した場合は、サービス名がそのまま別名として使われる• version 1:他のコンテナからサービス名を使って接続することができなかった

• linksで紐付けする必要があった

• version 2:composeファイルに書いた全てのサービス間に自動的にリンクを張る仕様になった

• linksとわざわざ書く必要がなくなった

linksとdepends_on似てる?

Page 36: Docker compose selenium-grid_tottoruby_25

• depends_on

• コンテナを立ち上げる順番を決める• コンテナが起動する順番を指定しても、起動完了まで待ってくれない• 接続したいデータベースが準備できていないのに、先にWEBアプリが立ち上がるという問題も起こりうる

linksとdepends_on似てる?

Page 37: Docker compose selenium-grid_tottoruby_25

はまったこと ~linksに書いても/etc/hostsに反映されない~

• 名前解決をさせたい

• ググルとlinksに書くと/etc/hostsに反映されるという記事が結構ある

• linksに書いたが、/etc/hostsを見ても書き込まれない・・・

• バージョンが古い(1.4系)とその現象が起きたという記事はあった

• けど、今のバージョンは1.11.2(最新)

Page 38: Docker compose selenium-grid_tottoruby_25

はまったこと ~linksに書いても/etc/hostsに反映されない~

https://github.com/docker/compose/issues/2841

Page 39: Docker compose selenium-grid_tottoruby_25

https://blog.docker.com/2016/02/docker-1-10/

名前解決のためのDNSサーバ:ホスト名の検索は、 /etc/hostsではなくDNSサーバで行われるため、

より信頼性とスケーラビリティが向上します。

Page 40: Docker compose selenium-grid_tottoruby_25

http://docs.docker.jp/engine/userguide/networking/configure-dns.html

Page 41: Docker compose selenium-grid_tottoruby_25

• docker network inspect

[ネットワーク名]

結論

Page 42: Docker compose selenium-grid_tottoruby_25

• port is already allocatedと言われる

• コンテナの削除やdockerの再起動をしたがダメだった

はまったこと2 ~dockerでゾンビ化したポートを開放する~

Page 43: Docker compose selenium-grid_tottoruby_25

はまったこと2 ~dockerでゾンビ化したポートを開放する~

• コンテナの利用していたポートを掴んだまま

終了して、コンテナ再起動時にエラーになる

ことがあるらしい

• 通常はdockerの再起動でポートが解放される

• ファイルを削除 & docker再起動で解決! ⇒

https://unicorn.limited/jp/item/707

Page 44: Docker compose selenium-grid_tottoruby_25

おわりに

Page 45: Docker compose selenium-grid_tottoruby_25

まとめ

• docker / docker-compose お手軽!すごい便利!

• 基本docker-compose up でいい感じにできるけど、リファレンスをちゃんとみたほうがいい

• まず、docker hubにないか探してみるべし

Page 46: Docker compose selenium-grid_tottoruby_25

http://qiita.com/ootaken/items/26d37cb34d3b575277e0

Page 47: Docker compose selenium-grid_tottoruby_25