Docker を使ってみるの巻

検討理由

最近、検証環境の都合で、毎日環境を作る/消すを繰り返している。

作業していて、以下の要望が生まれた。

1.アプリ部分だけでもイメージ化して保存して、作り直しの手間を少なくしたい

2.複数アプリを単一サーバで動かしたい

日によって動かしたいアプリが異なるため、ポコポコ切り替えしたい

月額を安くあげるため、単一サーバで完結させたい

 

ふと、Docker を見てみるとかなりフィットしそう。

っということで、使ってみます。

 

導入

以下のサイトを参考

http://qiita.com/Seisan0044/items/cd91eaeaeb4cd2fa3629

※2017.06.19 上のサイトは、環境によってエラーとなるため参考やめました

 

Windows 10 上で使いたいので、以下のサイトを参照

http://qiita.com/osuo/items/99a2b7413ce75f8217be

 

 

事前設定と確認

Intel Virtualization Technology を使うため、

PC 再起動して、F3 連打からBIOS 設定で、Intel Virtualization Technology を有効化する。

VAIO VJS131 の場合

1."BIOS 設定を起動"→ 2."Advanced"  →3.Intel(R) Virtualization Technology の設定を"Enabled"

 

Docker のインストール

以下のサイトから、Docker Toolbox のダンロード

https://www.docker.com/products/docker-toolbox

Docker のToolbox は、名前の割に重いので、ダウンロード時は通信量と時間に注意。

私の環境では、30分程度必要。容量的に中身は、SDK ライクなのかも。

 

Docker 設定

DockerToolbox.exe を実行して、インストール

※Select Additional Tasks で、”Install VirtualBox with NDIS5 driver” の項目にチェックを入れること。

インストール完了後、”Docker Quickstart Terminal” を起動

エラー無く、クジラのアスキーアートが出たら成功。

エラーが出た場合は、下の項目”エラー対応と結果”参照

 

下のコマンドで、動くか試験する

 docker run hello-world

“docker run hello-world”と出たら成功

 

 

Compose を始める

以下のサイトを参考にCompose を準備する

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

 

作業用のディレクトリ作成と移動

$ mkdir composetest
$ cd composetest

 

app.py という名称のファイルを作成

vi app.py

 

app.py

from flask import Flask
from redis import Redis


app = Flask(__name__)
redis = Redis(host='redis', port=6379)


@app.route('/')
def hello():
    redis.incr('hits')
    return 'Hello World! I have been seen %s times.' % redis.get('hits')


if __name__ == "__main__":
    app.run(host="0.0.0.0", debug=True)

※環境によって、上のコードをコピーペーストするとインデントヅレが発生する可能性があります

※ズレた場合、vi で上のソースになるようインデントを修正して下さい

 

アプリケーションの依存関係を定義 するrequirements.txt の作成

後で、下のライブラリをpip する

vi requirements.txt

requirements.txt

flask
redis

 

Docker ファイルの作成

vi Dockerfile

Dockerfile

FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py

 

イメージの構築

docker build -t web .

※ ” . ” まで忘れずに

下の一文が出れば成功

Successfully tagged web:latest

※SECURITY WARNING が出てますが、ローカル環境なので無視

 

docker-compose.yml の作成

サービスの集まりを定義するため、以下のコマンドと内容を作成

vi docker-compose.yml

docker-compose.yml

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis

※スペースのインデントで、上のコードになるよう調整が必要

※error が出た場合、うまく上のコードの形になっていないこと有り

 

下のコマンドで、インスタンスのIP アドレスを確認する

docker-machine ip <Enter your instance name>

※私の環境では、default というインスタンスのため、下のコマンドで確認しました。

 $ docker-machine ip default
 192.168.99.100

 

上のイメージで、アプリケーションを起動する

docker-compose up

下の状態になったら成功

$ docker-compose up
Starting composetest_redis_1 ...
Starting composetest_redis_1 ... done
Starting composetest_web_1 ...
Starting composetest_web_1 ... done
Attaching to composetest_redis_1, composetest_web_1
redis_1 | 1:C 30 Jun 05:13:03.597 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1 | * Restarting with stat
web_1 | * Debugger is active!

 

ブラウザを起動して、取得したIP アドレス(私の場合、192.168.99.100)へアクセス

ブラウザのURL スペースへ以下の情報を入力

http://192.168.99.100:5000/

下の画面が出力されれば成功

キャプチャ1

 

 

 

 

エラー対応と結果ログ

/*error1

結論から言うと、VirtualBox の最新版5.1.22. を個別にインストールする。

Docker Toolboxのインストールで、インストール内容のVirtualBox のチェックを外してインストールすることで、解決した。

下へ備忘録としてやったことをアップしておく。

 

インストール完了後、”Docker Quickstart Terminal” を起動

エラー”This computer doesn’t have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory”が発生

PC 再起動して、F3 連打からBIOS 設定で、Intel Virtualization Technology を有効化する。

VAIO VJS131 の場合

1."BIOS 設定を起動"→ 2."Advanced"  →3.Intel(R) Virtualization Technology の設定を"Enabled"

 

再度、”Docker Quickstart Terminal” を起動。Error 内容通りに有効化したが、解決せず。

調査開始し、下の内容も確認するも解決せず。

http://picworld.jp/2016/03/28/vt-x-%E3%82%92%E6%9C%89%E5%8A%B9%E3%81%AB%E3%81%97%E3%81%9F%E3%81%8F-%E3%81%A6-3-%E6%97%A5%E7%A8%8B%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%8B%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%A0%E3%81%8C%E3%80%81windows/

 

調べてみるとバーチャルボックスがダメなのか?

下のURL の内容に従い、ダウングレードしてみる。

http://acchi-muite-hoi.hatenablog.com/entry/2016/06/20/042002

Virtual Box 4.へダウングレードするとバージョン5. へアップグレードしろ、とエラーが出ます。

 

以下サイトに従い、再インストールする。

http://qiita.com/yaju/items/0e98e88f3638d25d69e0

 

Virtual Box のエラーに遭遇した

以下のサイトに従い設定変更する

http://yyfor.blog.fc2.com/blog-entry-4.html

1.コンポーネントサービスを開く
winキー+Rキーファイル名を指定して実行”DCOMCNFG”と入力
コンピューター→マイコンピューター→DCOMの構成→VirtualBoxApplication

2.右クリックプロパティの
IDプロパティを起動したユーザーから対話ユーザーへ変更

※Windows 10 の私の環境では、上の設定をするとエラーが出たため、規定値”起動したユーザ” で設定中

 

再インストールする

削除した後に再起動することをお忘れなく。。。

Oracle とDocker Toolboxのファイルが残っていたので、削除。

linux 風に言うと下の感じ。

rm  C:\Program Files\Oracle
rm  C:\Program Files\Docker Toolbox

 

以下のサイトから、最新版(5.1.22.:2017年6月19日現在)をインストール。

http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

 

再度、Docker Toolbox をインストールする。

インストール時にVirtualBox のチェックを外すこと。

 

再度、”Docker Quickstart Terminal”  を実行して成功。

error1*/

 

/* 以降失敗2

work ディレクトリで、yml の作成

vi docker-compose.yml

 

docker-compose.yml

jenkins:
  image: jenkins
  ports:
    - "8080:8080"

 

ドッカー作曲(オサレな感じですね)を実行

docker-compose up -d

 

エラー発生。。。

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here

 

docker-compose のことを知らずにやっているので、解決策を求めて、公式サイトへ

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

 

恐らく、jenkins をgit-hub から落として、設定しとく必要があった。

失敗2 */

 

/*以降失敗3

Virtualbox のぶち壊したのでメモ

Virtualbox を起動したまま端末を強制終了したため、仮想マシンが正常に動作しない状況になった。

幸い、仮想マシンには手を入れていないので、再構築した。

ちゃんと終了できるように以下のサイトを勉強。

 VirtualBox 導入で最初にやるべきこと。GUEST ADDITIONS 導入と仮想マシーン管理(基礎)コマンド

具体的には、仮想マシンの終了は”シャットダウン信号を送信する“オプションで実行する。

 

ホスト(端末)OS のシャットダウン時に以下のコメント発生

virtualbox interface has active connection

Virtualbox の右上バッテンボタンで終了した時に上の状況が発生した。

ファイル -> 終了 で、終わらせれば、上のコメント発生無く、OS を終了できた

失敗3*/

 

/* error4

docker-compose.yml の作成

サービスの集まりを定義するため、以下のコマンドと内容を作成

vi docker-compose.yml

docker-compose.yml

version: '2'
services:
  web:
    build: .
    ports:
     - "5000:5000"
    volumes:
     - .:/code
    depends_on:
     - redis
  redis:
    image: redis

※スペースのインデントで、上のコードになるよう調整が必要

※error が出た場合、うまく上のコードの形になっていないこと有り

 

上のイメージで、アプリケーションを起動する

docker-compose up

 

エラー発生

ERROR: yaml.scanner.ScannerError: mapping values are not allowed here

下のサイトを見るに構文エラーの様子

http://qiita.com/pugiemonn/items/b771fd96015960e1e20e

 

docker-compose.ymlの書き方を調査中

構文の注意点として、tab によるインデントは、”\t” と認識され、Syntax エラーがでます。回避するために、スペースでインデントするか、インデントを揃えないか、の方法で回避して下さい。

 

新たな以下のエラーが発生中、、、

$ docker-compose up
ERROR: In file '.\docker-compose.yml', service 'protocol' must be a mapping not a string.

 

protocol は必ず単一の単語でないマッピングでなければなりません、、、だと。。。

もろもろイジって、

以下の通り修正してみたら、、、

修正前

 ports: - "5000:5000"

修正後

ports: - 5000:5000

そしたら、下のエラーへ変化。。。

$ docker-compose up
ERROR: In file '.\docker-compose.yml', service 'ports' must be a mapping not an array.

 

.yml は、インデントがかなり重要ということが判明。

具体的には、下のURL のdocker-compose.ymlサンプルにインデント含めて同じに作成する必要があります。

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

php のように<> で括っておけば、中は自由っという感覚でかくと、上のようなエラーが出ます。

error4*/

 

/*error5

上のイメージで、アプリケーションを起動する

docker-compose up

 

docker-compose up やるとApp.py でエラー発生

 

Starting composetest_redis_1 ...
Starting composetest_redis_1 ... done
Starting composetest_web_1 ...
Starting composetest_web_1 ... done
Attaching to composetest_redis_1, composetest_web_1
redis_1 | 1:C 30 Jun 05:06:34.027 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
web_1 | File "app.py", line 12
web_1 | return 'Hello World! I have been seen %s times.' % redis.get('hits')
web_1 | ^
web_1 | IndentationError: unexpected indent
composetest_web_1 exited with code 1
Gracefully stopping... (press Ctrl+C again to force)
Stopping composetest_redis_1 ... done

app.py のインデントエラーを解消。

なぜか、\t が入っていたことが原因のようです。

インデントをスペースで正した。

error5*/

Docker を使ってみるの巻” への2件のフィードバック

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中