docker compose selenium-grid_tottoruby_25

Post on 05-Apr-2017

51 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

自己紹介

ほきもと まさゆき(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

top related