Docker 入門
Docker はじめの一歩
nginx のコンテンツにボリュームを利用する
前のページではローカル環境の index.html をビルド時にコンテナにコピーしました.この方法では index.html を更新するたびにコンテナをリビルドする必要ありました.ここでは,ローカル環境に html
ディレクトリを作成し,そのフォルダをコンテナの /var/www/html
ディレクトリにボリュームとして接続します.これにより,ローカル環境で index.html を編集したり,ローカル環境の html
ディレクトリに新たなファイルを設置すれば即座にコンテナのコンテンツに反映されることになります.
まず,任意のディレクトリを作成し,その中に html
サブディレクトリと Dockerfile
を設置します.html
サブディレクトリには次のような index.html と index2.html を設置します.
html/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello Docker!</h1>
<p>volume</p>
</body>
</html>
html/index2.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<h1>Hello Docker!</h1>
<p>index2</p>
</body>
</html>
Dockerfile は次の内容とします.
FROM ubuntu:latest
RUN apt-get update -y && apt-get install nginx -y
CMD ["nginx", "-g", "daemon off;"]
作成したプロジェクトのフォルダに移動し,Dockerfile をビルドします.ビルド後に作成されるイメージの名前は nginx_docker_volume
としておきます.
% docker build -t nginx_docker_volume . ⏎
[+] Building 0.3s (6/6) FINISHED docker:desktop-linux
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 325B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:latest 0.3s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/2] FROM docker.io/library/ubuntu:latest@sha256:9cbed754112939e91 0.0s
=> CACHED [2/2] RUN apt-get update -y && apt-get install nginx -y 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:9098e82607e06c9bc6b45af5560e8d1d88c97e2c11b 0.0s
=> => naming to docker.io/library/nginx_docker_volume 0.0s
View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/sgnlpm344fob70fg80glphny1
What's next:
View a summary of image vulnerabilities and recommendations → docker scout quickview
ビルド完了後にイメージが作成されていることを一覧で確認します.
% docker image ls ⏎ REPOSITORY TAG IMAGE ID CREATED SIZE nginx_docker_volume latest 9098e82607e0 4 minutes ago 164MB nginx_docker_index latest 39106112b99e 8 minutes ago 164MB nginx_dockerfile latest a80290eff455 13 minutes ago 164MB nginx_image latest 574fd29fc459 20 minutes ago 172MB ubuntu latest b60cb74dfa1b 2 weeks ago 101MB
作成できたイメージ nginx_docker_volume
からコンテナを生成して起動します.このときコンテナ名は web4
とし,ローカル環境の 8084 番ポートをコンテナの 80 番ポートに接続しています.さらに,-v
オプションを使ってローカル環境の html ディレクトリをコンテナ内の /var/www/html にボリュームとして接続します.なお,./
は Dockerfile と同じディレクトリであることを意味する相対パス指定です.
% docker run -d -p 8084:80 --name=web4 -v ./html:/var/www/html nginx_docker_volume ⏎
42376607e4aef4ffcacf2c7a138a918bc42ad7421f9e076a78c466f7620a8095
コンテナの起動を確認するために docker container ls
コマンドを実行します.
% docker container ls ⏎
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42376607e4ae nginx_docker_volume "nginx -g 'daemon of…" 23 seconds ago Up 23 seconds 0.0.0.0:8084->80/tcp, [::]:8084->80/tcp web4
Web ブラウザを起動し http://localhost:8084/ と http://localhost:8084/index2.html に接続します.ローカル環境で作成した index.html や index2.html の内容が閲覧できることを確認します.さらに,ローカル環境でファイルを編集して Web ブラウザで再読み込みすると,直ちにその編集が表示結果に反映されることに注意してください.
これまでは Dockerfile を元にイメージをビルドして,そのイメージからコンテナを起動するという手続きを一つ一つコマンドを利用して実行してきました.次のセクションでは,docker compose
を使って複数のコンテナの連携させて運用する方法を確認します.