2016年5月5日木曜日

DockerでWebサーバーを立ち上げてみた(Ubuntu, Mac)

以前のエントリでDockerをインストールしてみたんですが、それからずっと放置してたので、GWの機会にちょっといじってみようかと思い立ちました。
SeekGeeksの開発環境はVagrant+Chefで構築したんですが、とりあえずDockerでも同じような環境を構築することを目標にしてみました。
なのでとりあえず第一段階として、ドットインストールとか見てDockerにApache入れてブラウザで表示することにチャレンジ。

Dockerは、pullしてきたイメージからコマンドラインでいじくってカスタマイズして、完成品を再度イメージ化して使い回すこともできるみたいですが、個人的にはChefでプロビジョニングする感じでセットアップ内容をテキストで残しておきたい。そういうときはDockerfileというのを作ると良いらしい。
で、Dockerfileはこんな感じになりました。お作法はググればすぐ見つかると思うので割愛。

<Dockerfile>
FROM centos:centos6
MAINTAINER name surname <address@domain.com>
RUN yum install -y httpd
EXPOSE 80
CMD ["usr/sbin/httpd", "-D", "FOREGROUND"]

とりあえずLinux Mintで。


ひとまず普段使いのUbuntu系軽量OS、Linux Mintでやってみます。
まずはイメージのダウンロード。
docker pull centos
で最初やろうと思ったんだけど、これだと以降のコマンドで失敗するみたい。参考URLはこちら。
Dockerのcentosでapacheインストール失敗する。rpmがうんちゃらとか言われる

回避するには最新のCentOSじゃなくて、CentOS6を使うと良いらしい。なので、
docker pull centos:centos6
次にDockerfileをビルドする。コマンドは以下でいいらしい。(Dockerfileがあるディレクトリにcdで移動してる前提)
build -t mydocker/httpd .
うまく作れてるかは
docker images
で確認できます。
で、起動するには
docker run -p 8080:80 -d mydocker/httpd
 これで、ブラウザを開いてlocalhost:8080と打つと、Apacheの初期画面が表示されました。

次はMacで。

同じ感じでMacでもやってみました。
docker pull centos:centos6
build -t mydocker/httpd .
docker run -p 8080:80 -d mydocker/httpd
で、ブラウザでlocalhost:8080って打つと、「この画面は表示できません」的なエラー。
なんで??と思ってググったら、Macはboot2dockerっていうVirtualBoxを経由してDockerを使う形式らしく、
Docker <--> VirtualBox <--> Mac
って感じで二重にポートフォワードする必要があるらしい。やり方は、
boot2dockerのポートフォワードで一瞬ハマる - とっしぃのTech Memo
とかに載ってたので、これ使えばできそう。
でも、よく考えたら別にApacheにアクセスさえできれば良くて、localhostである必要はまったくなかったので、
Mac OS X へのDockerのインストール方法 - Qiita
を見ながら以下のコマンドを実行。
docker-machine ls
そしたら、192.168.100.xとかいうIPアドレスが出てくるので、ブラウザで<出てきたIPアドレス>:8080を入力。無事Mintと同じ画面が表示されましたとさ。

==========
次回はホスト側のディレクトリとDocker上のディレクトリを共有する方法を調べようと思います。