Docker入門日誌-その2- Webサーバ立ち上げ編

ebiです。相変わらずWindowsを使って、Docker入門の続き(前回)やっていきます。
誰かのDocker入門の助けになるように、すんなり行ってる風に書いていきますけど、実際は色々と手出しては詰まって時間食い潰してました。

httpd イメージを動かしてみる

Code School の Docker講座を覗いてみたら、作るだけで良い感じに Apache が起動してくれるイメージを使ってたので、まずはこいつを実機で動かしてみることにしました(もっと親切なイメージを使う話は後から)。

docker run する

docker run -d -p 9999:80 httpd

-dはデタッチドモードでコンテナを起動する、とのこと。詳しい説明はhelpコマンドやここらへんで。

-p 9999:80はポート番号の指定です。

  • 左側がDockerホスト側のポート番号です。好きな番号を指定すればオッケーです。この後で使います。
  • 右側がコンテナ側のポート番号です。一般的なWebサーバなので80番にします。
docker ps

を実行してみると、今起動したコンテナの情報が足されているはずです。

アクセスしてみる

それでは、実際に起動した Apache が動かしてくれるWebページを見に行きましょう。

ブラウザを起動してURLに

localhost:9999

と。

……あれ?
アクセスできない。なんで??

ここで思い出してほしいんですけど、Windows の場合は Docker を動かしているのは Windows ではなくDocker Machine で作った VirtualBox上のDockerホスト なのです。
つまり、localhost じゃなくて Dockerホストにアクセスしに行かないといけないんですね。

そこで

docker-machine ls

で出てくるURLを再確認します。

ポート番号をさっき指定したやつに付け替えて、

192.168.99.100:9999/

でリベンジ

やりました。

次の課題

Webサーバが立ち上がったのは喜ばしいことですが、開発はどうやって進めればいいのでしょうか……。
とりあえず考えるのはこの二つです。

  • Webサーバを動かしているコンテナにSSH的なので繋ぎたい
  • コンテナとWindows本体の共有フォルダを作りたい

前者は docker exec なるコマンドで手軽にできるっぽいです。

docker ps

をすると出てくる、コンテナの CONTAINER ID か NAMES を dockerコマンドの対象となるコンテナを指定する時に使います。

docker exec -it NAME /bin/bash

NAMEはコンテナを指定する文字に置き換えてください。

あとは普通にSSH繋いでいる時みたいな感じで動かせます。

後者は docker run に -v オプションを付ければいいだけ、と言えばそうなのですが……。Windows側のディレクトリ指定するのにちょっと苦労しました。

docker run -v /c/Users/ebi/Desktop/testdir:/usr/local/apache2/htdocs -p 8888:80 -d httpd

これで成功しました。Windows側で index.html を作ってみて、反映されているかどうか確かめてみてください。
-p オプションでポート番号書いた時のように、-v オプションにWindows側のディレクトリ:Dockerコンテナ側のディレクトリを指定します。

基本中の基本となるDockerコマンドを使って、ローカルでWebサーバを動かすことに成功しました。ちょっと次は別の方法も試してみます。

Kitematic を使ってみる

Kitematic は Docker コンテナの立ち上げや管理をGUIで行うことができるツールです。

実際の画面はこんな感じです。多分最初に開いた時には、イメージ一覧とかが表示されるはずです。
使いたいイメージをGUI上で検索して、ポチっと docker run できちゃうのでお手軽です。

左側にはdocker ps -a した時のようにコンテナ一覧が表示されています。 先ほど立ち上げたコンテナを選択して、Settingを確かめてみるとポート番号(Ports)や共有フォルダ(Volumes)の設定も簡単に確認・変更できます。

ただ、厄介な所があって、Volumesの設定は新規追加ができないようで(?)、基本的にはコマンドプロンプトから -v オプション付きで docker run を試みることになりそうです。

再びHello World

Kitematic 編と言うことで、もう一度コンテナを作っていきます。 hello-world-nginx イメージを CREATE してみましょう。

Kitematic 公式のものだけあって、共有フォルダ設定も勝手にやってくれるのです。強い。
EXECって書いてあるボタン押すと docker exec できます。

Kitematic を開いて5秒でWebサーバ立ち上げが完了してしまいました……。

まとめ

Dockerを使ってローカルで使えるWebサーバを立ち上げてみました。
docker コマンドを地道に打ち込んでみたり、GUIツールのKitematicを使ってみたりしました。
ポートが繋がった、開発用の共有フォルダもできた。と言うところまで確認できたので、後はどうにでもなりそうです。

次回は満を持してDocker環境でRails開発をやってみます。

関連記事(Docker)

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

ebi

1993年生まれ。宮崎出身。2016年に新卒のWEBエンジニアとして入社。慶應SFCの関係者が多い弊社ですが、僕は早稲田卒です。大学時代は情報系も混じった学科でしたが、結局専攻にはせず。エンジニア経験値不足のため、日々修行中です。趣味はダーツ・ビリヤード等。

ebiの書いた記事

インフラ
Docker入門日誌-その3- Rails開発編

2017年05月25日

インフラ
Docker入門日誌-その1- Hello World編

2017年05月22日

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ