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
をリロードすると内容が変更されていることが確認できます。