神戸学院大学 経営学部 林坂ゼミ

Docker 入門トップページ

« 戻る 次へ »

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 ブラウザで再読み込みすると,直ちにその編集が表示結果に反映されることに注意してください.

docker-07
docker-08

これまでは Dockerfile を元にイメージをビルドして,そのイメージからコンテナを起動するという手続きを一つ一つコマンドを利用して実行してきました.次のセクションでは,docker compose を使って複数のコンテナの連携させて運用する方法を確認します.