Docker ホスト側の作業フォルダとコンテナ側のフォルダを同期させる
Docker Nginxを起動して基本的なコマンドを理解するで、Nginxのコンテナを起動してWelcome to nginx!を表示するようになりましたが、実際の開発ではホスト側で編集したhtmlを表示したいことがあると思います。
そのため、ホスト側の作業フォルダをコンテナ側のNginxのドキュメントルートフォルダになるように設定します。
Nginxのドキュメントルートを確認
まずはコンテナ側のNginxのドキュメントルートを確認します。
コンテナ側のbashを起動し、以下のコマンドでNginxの設定ファイルを確認します。
(コンテナ側のbashの起動方法はDocker コンテナの中に入ってBashなどでコマンド実行をするで紹介しています)
# cat etc/nginx/conf.d/default.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
--省略--
ドキュメントルートは/usr/share/nginx/htmlであることが確認できます。
ホスト側のファイルの作成
ホスト側に動作確認用のhtmlファイルを作成します。
カレントディレクトリにsrcフォルダを作成し、その中にindex.htmlファイルを作成します。
/docker/index.html<html>
<head>
<title>dockerテスト</title>
</head>
<body>
<p>Hello World</p>
</body>
</html>マウント
docker runコマンドの--mountオプションでホスト側とコンテナ側のフォルダを紐付けます。
type=bind,source=ホスト側のパス,target=コンテナ側のパスの形式で指定します。
mountではなくvolumeオプション(-v)を使っている記事が多くありますが、現在では mountオプション(--mount)が推奨されています。
$ docker run --name my-server -d -p 8080:80 --mount type=bind,source=$(pwd)/src/,target=/usr/share/nginx/html/ nginx$(pwd)はカレントディレクトリに置き換わります。
ブラウザでlocalhost:8080にアクセスするとWelcome to nginx!ではなく、先ほど作成したhello worldが表示されます。
また、ホスト側で/src/index.htmlの内容を変更して保存後、localhost:8080をリロードすると内容が変更されていることが確認できます。