SEの募集条件に「dockerが使えること」っていうのを見かけます。
dockerって何?
初見だとハードルが高いのですが、
Windwsでdocker操作できるGUIツール、kitematicを使って解説します。
「これを実行すると、こうなる」と
SE的にわかりやすく紹介しています。
dockerとは読み方は「ドッカ-」。
コンテナ仮想化ツールです。
仮想化環境の一歩進んだ考え方で、サービスを「コンテナ」という単位に切り分けて仮想化するんですね。
ひらたく言うと、システム構築を効率的に行うのに役立つツールですが…
開発者にとっては、
開発環境(テスト環境)がコマンド一発で作れるという便利ツール、と考えておけばよいでしょう。
「イメージ」と呼ばれるインストールCDのようなファイルを指定して、dokerコマンドを実行すると…
ローカル環境でCentOS(Linux)が起動する!
ローカル環境でapache(Webサーバ)が起動する!
ローカル環境でMySQL(データベース)が起動する!
つまり…
コマンド一発で、
ローカル環境で自分専用の開発環境が起動する!
dockerの元になるイメージファイルを変更していくことで、
開発メンバー100人分の開発環境を、統一した状態に保てる。
んですね。こんなラクなことはないです。
ひとまず「開発でdockerを使う」というのは、上記のようなことだと考えておくと良いでしょう。
パソコンですぐ動くので、まずは使ってみましょう。
ダウンロードには、docker公式サイトへのアカウント登録が必要になります。
ID、メールアドレス、パスワードを入力しましょう。入力し終わったら、その下にチェックをつけて、Sign Upをクリック。
本人確認用のメールが送られてきます。
私が試した時は、メールがくるまでけっこう時間がかかりました。
件名「Please confirm email for your docker ID」でメールが来るので、迷惑メールフォルダなどに振り分けられていないか確認しましょう。
メール本文中の「Confirm Your Email」をクリックで、本人確認が完了します。
ダウンロードページを開いてみましょう。
Windows10なら、docker Desktopをダウンロード。
それ以前のWindowsなら、docker Toolboxを使います。
ダウンロードページ右上に注目。
Please Login To Downloadボタンをクリックしましょう。
ログイン画面が表示されるので、登録したIDとパスワードでログインします。
ダウンロードページの右上の表示が「Get docker」に変わるので、クリック。
インストール用ファイルがダウンロードされるので、ダブルクリックして実行します。
Windows10以前の古いWindowsの場合は、docker Toolboxを使います。ダウンロードページはこちら。
docker Toolbox overview | docker Documentation
「Get docker Toolbox for Windows」をクリックして、インストールファイルをダウンロードします。
私は、自宅でWindows7の古いパソコンを使っているので、Windows7、docker ToolBox使用を前提に説明を続けます。
まず、「仮想化支援機能をオンにする」という設定が必要。
BIOS画面にて設定します。BIOS画面は、パソコン起動時にF2を連打していると表示される、青い設定画面のこと。
機種によって表示は異なるのですが、私の使用するDELL PRECISION 390だと、こんな画面。
Performance → Virtualization という項目の中にありました。デフォルトだとOFFになっているので、Onにして再起動。
BIOSを抜けるときに「設定を保存して終了」しないと、OnにしたはずがOffに戻ってた?ということもあるので注意です。
パソコンを起動したら、docker Toolboxをインストールします。
インストールは基本的に、「Next」ボタンを連打、最後に「Install」ボタンをクリックすれば完了します。
スタートメニューに以下の2つが追加されます。
docker Quickstart Terminalは、コマンドを打ち込むターミナル。
Kitematicは、GUIです。画面をクリックで色々できます。
Kitematicを起動します。
かなり時間がかかって、「Connect to docker Hub」という画面が出てくれば成功。
だけど、私はここに辿り着くまで何度も何度も失敗しました。
読む気がなくなるほど、長いエラー。スクロールして、下の方を見てみると…
「This computer doesn't have VT-X/AMD-v enabled.Enabling it in the BIOS is mandatory」
というメッセージ。
何のこっちゃという感じですが、意味は「仮想化支援機能が無効になっています。BIOSで有効になっていることが必須。」という意味。
BIOSで、Virtualization(仮想化支援機能)が無効になっているとこのエラーが出ます。
なお、Windows10では、OSの機能のHyper-Vが競合してこのエラーが出ることがあります。
コントロールパネル→プログラムと機能で、画面左の「Windowsの機能の有効化または無効化」をクリックし、Hyper-Vを無効にしてください。
Windows10以前を使っていると出るエラー。
USE VIRTUALBOXをクリックします。
いろいろいじってると、Kitematicで何の画面も出てこなくなることがあります。
ずっと待ち状態で、10分待っても変化なしという場合。
原因は「dockerが中途半端にインストールされて、にっちもさっちもいかなくなった」です。
この場合は、ターミナルを使って、dockerをいったん削除します。
スタートメニューから、docker→docker Quickstart Terminalを選択します。
色々エラーが出ると思いますが、待っていると「$」が表示されて、入力できる状態になります。
そこで、
docker-machine rm default
を実行。
デフォルトのdockerを削除するというコマンドです。
Are you sure?(y/n)
と出るので、yを入力。
ちなみに、
docker-machine ls
で、現在作られているdockerの一覧が見られます。
おかしな状態になったら、いったんdockerを削除してKitematicを起動しなおすと、あっさりうまくいくと思います。
この画面で、登録したIDとパスワードを入力します。
ここに出ているのが、docker-hubというクラウド上にある、dockerイメージです。
この画面が出てきたら、ログイン成功。
実際に、コンテナを作って動かしてみましょう。
dockerでコンテナを作ってみましょう。
Kitematicで、「hello-world-nginx」というイメージを探し、CREATEをクリックします。
nginx(エンジンエックス)は、ロシア製のWebサーバで、高負荷に強いとされています。
このイメージは、nginx上で、簡単なテキストを表示するデモです。
コンテナインストールの進捗が表示されます。
100%近くで表示が止まったりして不安になりますが、落ち着いて待ちましょう。
とてもあっけないのですが、これでもあなたのパソコンのローカル環境でnginxが稼働しています。
試してみましょう。
画面右上の「WEB PREVIEW」のところをクリック。
ウェブブラウザ(Chromeやインターネットエクスプローラなど)が起動し、以下のページが表示されます。
URLの表示は、
http://192.168.99.100:32768/
となっています。
仮想サーバが、192.168.99.100で起動していて、ポート32768版でウェブサービスが起動しているんですね。
これだけだとピンとこないので、表示内容を変えてみます。
画面右下の「VOLUMES」の /website_filesをクリックします。
Enable all volumes to edit files? (全てのボリュームで編集を可能にしますか?)と聞かれるので、Enable Volumesをクリック。
エクスプローラが開き、/website_filesフォルダが表示されます。
ファイルのパスはココ。
パソコンのマイドキュメント以下のフォルダが、dockerの仮想環境にマウントされたような形になっています。
/website_files以下にあるindex.htmlの内容を、「ハローワールド!」に書き換えます。
エディタなどで開いて、書き換えた後保存してください。
再び、「WEB PREVIEW」をクリックしてみると…?
ウェブブラウザに「ハローワールド!」と表示されました。
パソコン版dockerでKitematicを使ってて素晴らしいのは…
マウントする、とか、ポート番号を指定する、とか、初心者がつまづくような箇所を、すべてフィーリングでクリア出来てしまう点です。
Katematicの「STOP」をクリックで、コンテナは停止します。
停止するとSTOPだった箇所が「START」に変わるので、STARTをクリックで再度起動します。
コンテナを停止後、コンテナ名の右の「x」をクリックします。
※コンテナ名のところにカーソルを持って行くと、「x」マークが現れます。
本当に削除するか聞かれるので「Remove」をクリック。
これで、コンテナが削除されました。