ここ1,2年で注目を集めている仮想化技術の1つ「Docker」について、今更感がありますが試していきたいと思います。
他の仮想化技術との違いや特徴、開発環境として使っていくにはどうすればいいかなどを紹介していきたいと考えています。
これまでの連載
- Dockerであそぶ(1)DockerToolboxのインストール
- Dockerであそぶ(2)Centos7を実行する
- Dockerであそぶ(3)Apacheを使う ← 本記事!
- Dockerであそぶ(4)Apacheの設定を変える
- Dockerであそぶ(5)Apache-PHP連携
- Dockerであそぶ(6)Apache-PHP-Mariadb連携
- Dockerであそぶ(7)PhpMyAdminのインストール
- Dockerであそぶ(8)docker-composeでコンテナをまとめて管理
- Dockerであそぶ(9)AWS EC2でdocker-composeを使う
- Dockerであそぶ(10)docker-machineを使ってAWS(EC2)にDockerホストを構築する
Apacheを起動する
Apacheのような代表的なソフトウェアはいちいちインストールする必要はありません。公式サイトである「Docker Hub」にインストールされたイメージがたくさん公開されています。
今回はApacheのOfficialイメージをダウンロードします。
$ docker pull httpd:latest
sudoy@SUDOY-NOTE MINGW64 ~ $ docker pull httpd:latest latest: Pulling from library/httpd 1565e86129b8: Pull complete a604b236bcde: Pull complete 0408e37ae388: Pull complete dc12a6e10253: Pull complete 7ed67aea14fa: Pull complete c606f3c990fb: Pull complete d603a1c325f5: Pull complete 4824ecf7d40a: Pull complete fefbaf330d59: Pull complete ce9d71110ab8: Pull complete 7c020269d93b: Pull complete d20538a7c132: Pull complete ec25901cfc0b: Pull complete 42a2ce7ab80a: Pull complete Digest: sha256:a5a950d8ccef097a1cc4853c184d010e9b333d48e1d315acfa8ae2803d65adec Status: Downloaded newer image for httpd:latest
ダウンロードできたか確認します。
sudoy@SUDOY-NOTE MINGW64 ~ $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE httpd latest 42a2ce7ab80a 7 days ago 193.4 MB hello-world latest 0a6ba66e537a 6 weeks ago 960 B centos latest e9fa5d3a0d0e 6 weeks ago 172.3 MB
ダウンロードしたイメージを起動します。
$ docker run -it --rm -p 80:80 httpd:latest
新しいオプションが2つ登場しました。それぞれ↓のような意味があります。
オプション | 意味 |
---|---|
–rm | コンテナを停止したときに自動的にそのコンテナ情報を削除するオプション。 「docker ps -a」コマンドを実行しても表示されなくなります。コンテナの起動・停止を繰り返すとゴミが溜まっていくためこのオプションをつけます。 |
-p (–publish) | Dockerホストとコンテナのポートマッピングを設定する。 ホストの80番ポートへのアクセスをコンテナの80番へ転送する設定にしています。 |
起動が成功すると以下の様な動作ログが表示されるはずです。
フォアグラウンドでApacheが起動します。
sudoy@SUDOY-NOTE MINGW64 ~ $ docker run -it --rm -p 80:80 httpd:latest AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Fri Nov 27 08:11:15.719394 2015] [mpm_event:notice] [pid 1:tid 140078079252352] AH00489: Apache/2.4.17 (Unix) configured -- resuming normal operations [Fri Nov 27 08:11:15.719875 2015] [core:notice] [pid 1:tid 140078079252352] AH00094: Command line: 'httpd -D FOREGROUND'
起動確認をしましょう。以下のURLにアクセスします。IPアドレスは「Docker QuickStart Terminal」を起動したときに表示されますので、適宜読み替えてください。
http://192.168.99.100/
これでApacheを起動することができました。
起動したコンテナを終了するには「CTRL+C」を入力します。
HTMLファイルを公開する
次に、作成したHTMLをApacheで公開してみましょう。
ここで注意しなくてはいけないのは、起動したコンテナ(仮想マシン)は停止すると再起動することができなくなってしまうということです。(厳密には再起動することもできるのですが、Dockerではコンテナが持つ情報を変更することは推奨されていないようです。)
つまりコンテナ上に永続化したいファイルを保存してはいけないということになります。
そこでDockerではVolumeという仕組みが用意されており、Dockerホスト側とコンテナ側でファイル共有を行うことができるようになっています。ファイルはDockerホスト側で保存し、そのデータをコンテナ側でマウントしているイメージです。(コンテナ上ではファイルを永続化はしていなく、あくまでもDockerホスト側でデータを保持しているイメージ。)
まずは、Dockerホスト側で共有するフォルダを作ります。
$ mkdir -p Documents/docker/httpd/public-html/
フォルダができたらこの中にサンプルHTMLファイル(index.html)を作成します。
<html lang="ja"> <head> <meta charset="utf-8"> </head> <body> <h1>hello world</h1> </body>
では、先ほどと同じように「docker run」コマンドでコンテナを起動します。
このときにDockerホスト側とコンテナ側で共有するディレクトリを「-v」オプションで指定します。指定方法は「-v ホスト側の絶対パス:コンテナ側の絶対パス」です。
Dockerホスト側のパスは筆者の環境ですので適宜読み替えてください。
docker run -it --rm -p 80:80 -v //c/Users/sudoy/Documents/docker/httpd/public-html/:/usr/local/apache2/htdocs/ httpd:latest
実行結果はさきほどと変わりありませんね。
$ docker run -it --rm -p 80:80 -v //c/Users/sudoy/Documents/docker/httpd/public-html/:/usr/local/apache2/htdocs/ httpd:latest AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.2. Set the 'ServerName' directive globally to suppress this message [Fri Nov 27 08:56:08.217047 2015] [mpm_event:notice] [pid 1:tid 139702176688000] AH00489: Apache/2.4.17 (Unix) configured -- resuming normal operations [Fri Nov 27 08:56:08.219036 2015] [core:notice] [pid 1:tid 139702176688000] AH00094: Command line: 'httpd -D FOREGROUND'
以下のURLにアクセスします。
http://192.168.99.100/
実行結果が変わりました。
これでWindows側でファイルを修正すればその内容がダイレクトに反映するようになったはずです。
Eclipseなどの統合開発環境を使っている場合には、この共有ディレクトリ(public-html)以下を参照するようにすればOKです。
では今回はここまでにしたいと思います。