前回、docker cp コマンドでのindex.htmlの転送(更新)を行いました。
今回は、docker cp コマンドを利用せず、
違った方法でapache1サーバのindex.htmlを修正しようと思います。
■やりたいこと
Dockerホストの任意のディレクトリをapache1サーバの特定ディレクトリにマウントすることで、Dockerホスト上での修正をそのままapache1サーバで利用します。
■注意点
「Dockerホスト上のディレクトリをapacheサーバでマウントします。」と書くと、
若干Linux観点で解釈しようとするとハマるので、
先にマウント仕様について少し記載致します。
「Dockerホスト上のディレクトリをapacheサーバでマウントする」と記載した場合、
"apacheサーバがDockerホストのディレクトリを利用する" というイメージが近いです。
少し違った表現をすると、
"Dockerホスト上のディレクトリが共有ディレクトリになっており、そこをapacheサーバが利用している"
と言った感じが近いかと。
なので、何が言いたいかと言うと、
Dockerホストからもapacheサーバからもディレクトリ操作が可能
ということです。
少し横道にそれましたが、以降から本題です。
■手順概要
Dockerホスト上で任意のディレクトリを作成し、apache1サーバ起動時にDockerホスト上の任意のディレクトリをマウントさせます。
■手順
1.Dockerホスト上に任意のディレクトリを作成し、そこにindex.htmlを作成します。
今回は、Dockerホスト上に/var/tmp/apache1およびapache1/index.htmlを作成し、
index.htmlの中身は「/var/tmp/apache1 directory index.html」としました。
/var/tmp/apache1ディレクトリの権限とindex.htmlの権限は以下の通りです。
2.apache1サーバを作成します。
作成時にDockerホスト上の/var/tmp/apache1ディレクトリをマウントします。
docker run -itd --name apache1 -v /var/tmp/apache1:/usr/local/apache2/htdocs -p 8081:80 httpd:2.4
3.apache1サーバにブラウザからアクセスします。
「/var/tmp/apache1 directory index.html」と表示されていればOKです。
4.Dockerホストから/var/tmp/apache1/index.htmlを修正します。
「/var/tmp/apache1 directory index.html 2」と修正しました。
5.apache1サーバにブラウザからアクセスします。
「/var/tmp/apache1 directory index.html 2」と表示されていればOKです。
■マウントしているディレクトリをコンテナ上から操作してみる
Dockerホスト上でマウントしたディレクトリ(/var/tmp/apache1/)内のindex.htmlを更新することで、apache1サーバの/usr/local/apache2/htdocs/index.htmlが更新されることは前述の手順でわかりました。
では、今度はapache1サーバにログインして/usr/local/apache2/htdocs/内を更新してみます。
docker exec -it apache1 /bin/bash pwd ls -la cd /htdocs;pwd ls -la cat index.html
では実際にindex.htmlを修正してみます。
※viコマンドがapacheサーバにインストールされていなかったので、
echoで流しました。
ブラウザからアクセスしても、更新されていることを確認できました。
では、今度はindex2.htmlと言うファイルを作成します。
作成もできますね。
一度、apache1サーバからログアウトします。
Dockerホスト上からindex2.htmlが確認できるか見てみます。
きちんとindex2.htmlが存在することを確認できました。
では、apache1サーバを停止&削除します。
ブラウザからアクセスできないことも念のため確認します。
では、新しくapache2サーバを作成します。
作成時にDockerホスト上の/var/tmp/apache1をマウントします。
docker run -itd --name apache2 -v /var/tmp/apache1:/usr/local/apache2/htdocs -p 8082:80 httpd:2.4
ブラウザから8082番ポートへアクセスしてみます。
apache1サーバで使っていたindex.htmlを利用して、
apache2サーバを動作させることができました。
■起動中のコンテナにてDockerホストをマウントしたい
残念ながらできません。
コンテナを作り直す必要があります。
以上です。