Data Volumeコンテナの利用方法まとめ【入門者向け】

スポンサードリンク



こんにちは。sinyです。

本記事では、Docker入門者向けにdockerのData Volumeの使い方についてまとめました。

Data Volumeとは?

Dockerのコンテナ実行中に書き込まれたファイル等はホスト側にファイルやディレクトリをマウントしておかない限りコンテナを破棄した時点でデータが消失してしまいます。

例えば、データベースを利用している場合にコンテナ実行中に行われた変更内容が維持されないと困りますよね。

このように永続的にデータを保存しておきたい場合、データベース用のコンテナとは別にData Volumeコンテナという永続化専用のコンテナを用意する方法があります。

Data Volumeコンテナのポイント
  • Data Volumeコンテナのボリュームはホスト側の/var/lib/docker/volumes/配下に配置される。
  • Data Volumeコンテナを必要とするコンテナ(今回のケースではデータベース用のコンテナ)はホスト側のVolumeディレクトリがどこなのかということを知る必要がなく、Data Volumeコンテナ名を指定するだけでOK
  • Data Volumeコンテナとの結びつけはdocker run時に--volumes-fromオプションで指定する。

以下は、MySQLデータベースのコンテナを使用した場合にデータを永続的に保存するためにData Volumeコンテナを利用した場合の概要図です。

Data Volumeの利用方法

以下はMySQLを利用した場合にデータベースへの変更内容を永続的に保存するためにMySQLコンテナの他にData Volumeコンテナを使った場合の手順です。

DataVolume用のDockerfileの作成

今回はData Volume用のコンテナにbusyboxという軽量なLinuxOSを利用します。

以下のようなDockerfileを作ります。

FROM busybox

VOLUME /var/lib/mysql

CMD ["bin/true"]

FROMで元となるDockerイメージを指定します。(今回はbusybox)

VOLUMEに永続化したいボリュームを指定します(今回はMySQLのデータが格納されるディレクトリ)

CMDは bin/trueとしています。(単に正常終了するようなコード)

Data Volumeコンテナ用イメージを作成

docker imageコマンドで先ほど作成したDockerfileを使ってData Volume用のDockerイメージを作成します。
コマンド実行後にdicker imagesでイメージが作成されていることを確認しましょう。

docker image build -t siny/mysql-data .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
siny/mysql-data latest fb43d6a80082 2 hours ago 1.22MB

 

Data Volumeコンテナの実行

続いて、先ほど作成したData Volume用イメージを使ってコンテナを起動します。

docker container run -d --name mysql-data siny/mysql-data

ここでは、 --nameオプションでコンテナ名「mysql-data」を指定してDockerイメージ「siny/mysql-data」を元にData Volume用のコンテナを起動しています。

 コンテナ名がかぶっている場合はエラーになるためdocker rm <コンテナ名>で削除しておきましょう。

 

データベース用コンテナ(MySQL)の実行

最後にMySQLコンテナを実行します。

docker coitaner runコマンド実行時に--volumes-fromで先ほど起動したData Volume用のコンテナ名(mysql-data)を指定することで、MySQLのコンテナに/var/lib/mysqlのデータが保存されるようになります。

$ docker container run -d --rm --name mysql \
> -e "MYSQL_ALLOW_EMPTY_PASSWORD=yes" \
> -e "MYSQL_DATABASE=volume_test" \
> -e "MYSQL_USER=siny" \
> -e "MYSQL_PASSWORD=password" \
> --volumes-from mysql-data \
> mysql:5.7

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
98e783a3562d        mysql:5.7           "docker-entrypoint.s…"   17 minutes ago      Up 23 seconds       3306/tcp, 33060/tcp   mysql

 

docker psで確認するとMySQL用のコンテナ(mysql)が起動していることが確認できます。

 

MySQLに接続してデータを更新

それでは、docker container execコマンドを使ってMySQLコンテナに接続してテスト用にテーブルを作成してみます。

$ docker container exec -it mysql mysql -u root -p volume_test
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.27 MySQL Community Server (GPL)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

 

mysqlのプロンプト画面がでるので、以下のコードを実行してテスト用にuserテーブルを作成してみます。

mysql> create table user (id int, name varchar(10), address varchar(10));
Query OK, 0 rows affected (0.00 sec)

mysql> select * from user;
Empty set (0.01 sec)

テーブルを作っただけなのでレコードは0件です。

テスト用に2件ほどデータを追加します。

mysql> insert into user values (1, 'siny', 'Tokyo');
Query OK, 1 row affected (0.00 sec)

mysql> insert into user values (2, 'taro', 'Chiba');
Query OK, 1 row affected (0.01 sec)

mysql> select * from user;
+------+------+---------+
| id   | name | address |
+------+------+---------+
|    1 | siny | Tokyo   |
|    2 | taro | Chiba   |
+------+------+---------+
2 rows in set (0.00 sec)

2件データが登録されました。

ここで、MySQLコンテナを停止します。

docker container stop mysql

続いて、先ほどと同じdocker cointaner runコマンドでMySQLコンテナを再度起動します。

さらにdocker container execで再度MySQLコンテナに接続してselect * from user;を実行して先ほど作ったuserテーブルのレコードが存在していることを確認します。

mysql> select * from user;
+------+------+---------+
| id   | name | address |
+------+------+---------+
|    1 | siny | Tokyo   |
|    2 | taro | Chiba   |
+------+------+---------+
2 rows in set (0.00 sec)

 

上記の通り、MySQLコンテナを停止、起動してもデータベースのデータが永続的に保持できていることが確認できます。

以上、Data Volumeコンテナの利用方法まとめ【入門者向け】でした。

おすすめの記事