【Docker速攻入門】DockerでWebサーバーを構築する。データの永続化とポートフォワード設定。
これまでLinuxのOSをDockerでコンテナとして起動してみましたが、アプリケーションのみをDockerで起動することも出来ます。
今回はWebサーバーとして人気の高いapacheを使って起動してみましょう。
この記事で以下の事が理解できるようになります。
・Webページのコンテンツデータがコンテナの停止と共に破棄されないようにデータを永続化する。
・apacheへアクセスするポートがホスト機のポートと被らないようにポート読み替えを行う。
目次
1.今回の構成について
今回構築したい構成を図で表すと以下のようになります。
コンテナでapaheのコンテナを起動させて、コンテナとのhttp通信をポートフォワーディングで設定します。
今回はコンテナ外部からポート8000でアクセスするとコンテナ内部のポート80と通信できるようにします。
また、Webコンテンツのフォルダをホスト機(パソコン)のフォルダ「C:\htdocs」に割り当ててデータが維持されるようにします。
スポンサードサーチ
2.コンテナのイメージの探し方。
公式サイトで探す方法
コンテナで使用するイメージはクラウドサービス上からダウンロードします。
通常は公式である「Docker Hub」からダウンロードされます。
イメージを「Docker Hub」のサイトで探してみましょう。
まず公式サイトにアクセスします。
公式サイト:https://hub.docker.com/
サイトの上部に検索ボックスがありますので今回目的とする「apache」と入力してエンターキーを押してください。
すると検索結果が表示されます。
最上段にapacheの公式イメージが見つかりました。
「httpd」がイメージ名となります。
見つかった「httpd」の項目をクリックすると詳細情報が確認できます。
使い方など様々な情報がありますので慣れてきたらじっくり見てみるといいと思います。
コマンドによる探し方
コマンドからも探すことが出来ます。
コマンドプロンプトで以下のように入力します。
docker search apache
すると以下のように結果が表示されます。
C:\Users\user01>docker search apache NAME DESCRIPTION STARS OFFICIAL AUTOMATED httpd The Apache HTTP Server Project 3304 [OK] tomcat Apache Tomcat is an open source implementati… 2913 [OK] cassandra Apache Cassandra is an open-source distribut… 1222 [OK] maven Apache Maven is a software project managemen… 1135 [OK] zookeeper Apache ZooKeeper is an open-source server wh… 978 [OK] solr Solr is the popular, blazing-fast, open sour… 804 [OK] <以下省略>
NAMEの欄に表示されているのがコンテナイメージ名です。
スポンサードサーチ
3.Dockerのコンテナのデータを永続化する方法
永続化について
永続化とは、コンテナを停止してもデータが消えないように維持するために行う設定を言います。
コンテナイメージ内での設定ファイルなど固定され変更が少ないファイル(httpd.confファイルなど)は設定したらcommitしてコンテナイメージとして保存します。
一方頻繁に変更されるようなデータファイルの格納されるフォルダはホスト機のディスクをマウントしてデータが維持されるようにします。
永続化の設定方法
永続化する方法はコンテナを起動するときに「-v」オプションで指定します。
<書式>
-v ホスト側のパス:コンテナ側のパス
apacheのコンテンツフォルダ「/usr/local/apache2/htdocs/」をホスト機のフォルダ「c:\htdocs」でマウントするには以下のように指定します。
例:-v “c:\htdocs":/usr/local/apache2/htdocs/
4.コンテナ内部のポートにホスト機からアクセス出来るようにする方法
一般的にapacheはポート80のhttpプロトコルを使用して通信しますがそのままではコンテナの内部とは通信は出来ません。
ホスト機からコンテナの内部へ通信するにはポートフォワーディングをオプション「-p」で設定します。
<書式>
-p 外部のポート:内部のポート
例:-p 8080:80
スポンサードサーチ
5.DockerでApacheによるWebサーバーを起動する。
ではこれまでの設定方法を使ってWebサーバーを起動してみましょう。
準備
まずWebコンテンツ用のフォルダを用意します。
コマンドプロンプトで以下を入力します。
mkdir c:\htdocs echo HELLO Docker! > c:\htdocs\test.html
起動してみよう
コマンドプロンプトで以下のコマンドを入力してみて下さい。
docker run -d -p 8080:80 -v “c:\htdocs":/usr/local/apache2/htdocs httpd
以下のようにコンテナが起動します。
C:\Users\user01>docker run -d -p 8080:80 -v "c:\htdocs":/usr/local/apache2/htdocs/ httpd 46ab2fc069f8d2f338168be35948d1d8276317b016becfd1c8bd15423af425b8
ブラウザから「http://localhost:8080/test.html」にアクセスして表示されれば成功です。
6.まとめ
以上、DockerでWebサーバーを動かす方法を解説しました。
あとはホスト機(PC)の「c:\htdocs」フォルダにWebページを作って配置すればブラウザからアクセス可能ですのでいろいろと試してみて下さい。