はじめに
Dockerコンテナでボリュームをマウントし扱う方法を学びます。
DBやファイルなどを扱う際は、ボリュームをマウントします。
コンテナでボリュームをマウントするのには、理由があります。
コンテナ内にデータを保存してしまうと、コンテナを削除したり移動した際に、保存したデータがなくなってしまうかもしれないからです。
そのため、Dockerではデータへの参照を主に扱い、コンテナが消えてもデータは消えない形での運用が基本となります。
目的
Dockerを触りながら、コンテナにボリュームをマウントする方法を学ぶ
今回は、下記の操作を行います。
- 簡単なDockerfileを自作する
- Dockerボリュームを指定してコンテナを起動
環境
- macOS Mojave 10.14.6
- Docker engine 19.03.5
コンテナをアレコレしてみる
公式のnginxイメージで表示されるデフォルトの画面を変更してみます。
まずはデフォルトの画面を見てみる
まずは公式nginxイメージからコンテナを立ち上げ、デフォルト画面を確認してみます。
docker container run -d --name nginx -p 80:80 nginx
ブラウザでlocalhost
を開くと、デフォルトの画面が表示されます。
デフォルト画面を変更する
表示される画面を変更するために、公式イメージから自作のイメージを作成します。
Dockerfileを自作する
適当なフォルダにDockerfile
という名前のファイルを作成します。これが自作イメージになります。(たった3行ですが...)
FROM nginx:latest
WORKDIR /usr/share/nginx/html
COPY index.html index.html
また、デフォルト画面として表示するindex.html
ファイルを作成しておきます。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>My test page</title>
</head>
<body>
<h1>くじらコンテナ🐳</h1>
</body>
</html>
FROM
公式のnginxイメージをカスタマイズしていきます。
FROM
で自分のイメージの元として現在の公式リポジトリを使います。
FROM nginx:latest
WORKDIR
WORKDIR
は、その名の通りコンテナ内の作業ディレクトリを指定します。
WORKDIR /usr/share/nginx/html
COPY
COPY
は、ローカルのファイルをコンテナにコピーします。
ここでは、Dockerfile
と同じディレクトリに存在するindex.html
をコンテナ内に保存しています。
自作イメージからコンテナを立ち上げる
では、今作ったイメージからコンテナを立ち上げます。
先ほどDockerfile
を作成したディレクトリで、以下のコマンドを実行します。
docker container run -d --name nginx2 -p 8080:80 -v $(pwd):/usr/share/nginx/html nginx
-v
オプション
-v[ホストディレクトリの絶対パス]:[コンテナの絶対パス]
で、ボリュームをコンテナにマウントできます。
今回コンテナにマウントしているのは、先ほどのローカルディレクトリです。
以下のコマンドについて説明します。
-v $(pwd):/usr/share/nginx/html
-
$(pwd)
:これはDocker関係ないのですが、現在のディレクトリまでのフルパスです -
/usr/share/nginx/html
: Dockerファイルで指定した作業ディレクトリです
ローカルのディレクトリがコンテナからも参照されている状態になっています。
ブラウザで確認する
-p
コマンドで指定した8080
番ポートをブラウザで確認すると...
自作の画面が表示されました!
まとめ
今回は
- 自作のDockerfileを作成する
- Dockerボリュームを指定してコンテナを起動
しながら、実際にコンテナにボリュームをマウントしてみました。