LoginSignup
0
0

DockerのVolumeを使用してMySQLデータを永続化する

Last updated at Posted at 2024-02-24

Volume

ボリュームは、Docker コンテナによって生成および使用されるデータを永続化するための推奨メカニズムです。バインド マウントはホスト マシンのディレクトリ構造と OS に依存しますが、ボリュームは Docker によって完全に管理されます。

MySQLデータの永続化

MySQLのイメージをPULLする(前回の記事を参照)

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mysql        latest    56b21e040954   5 weeks ago   632MB
$ docker volume ls
DRIVER    VOLUME NAME
local     b333469b1329138728f70a9f6f74f66b19ffa3da0c878bb5e92017aa5b616bde

Volume「mysql-data」を使用してMySQLを起動する

$ docker container run --name my-mysql -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 -v mysql-data:/var/lib/mysql mysql
8e1983d1ea2ec7922392a4fca62caaadf810bb1e30ba947e7e4d5577ff4fff5b
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS
                            NAMES
8e1983d1ea2e   mysql     "docker-entrypoint.s…"   25 seconds ago   Up 24 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-mysql
$ docker volume ls
DRIVER    VOLUME NAME
local     b333469b1329138728f70a9f6f74f66b19ffa3da0c878bb5e92017aa5b616bde
local     mysql-data

MySQLにデータベースを作成する

$ docker container exec -it my-mysql sh
sh-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)

mysql> CREATE DATABASE my_db_01 DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db_01           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> exit
Bye
sh-4.4# exit

Volume の内容を確認する(my_db_01が作成されたこと)

$ docker volume ls
DRIVER    VOLUME NAME
local     b333469b1329138728f70a9f6f74f66b19ffa3da0c878bb5e92017aa5b616bde
local     mysql-data
$ docker volume inspect mysql-data
[
    {
        "CreatedAt": "2024-02-24T13:44:47+09:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/mysql-data/_data",
        "Name": "mysql-data",
        "Options": null,
        "Scope": "local"
    }
]
$ sudo ls /var/lib/docker/volumes/mysql-data/_data
[sudo] password for dxrdxr:
'#ib_16384_0.dblwr'   binlog.000001   client-cert.pem   *my_db_01*             private_key.pem   undo_001
'#ib_16384_1.dblwr'   binlog.000002   client-key.pem    mysql                public_key.pem    undo_002
'#innodb_redo'        binlog.index    ib_buffer_pool    mysql.ibd            server-cert.pem
'#innodb_temp'        ca-key.pem      ibdata1           mysql.sock           server-key.pem
 auto.cnf             ca.pem          ibtmp1            performance_schema   sys

MySQLのコンテナを削除して再作成する

$  docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS
                            NAMES
8e1983d1ea2e   mysql     "docker-entrypoint.s…"   15 minutes ago   Up 15 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-mysql
$ docker container stop my-mysql
my-mysql
$ docker container rm my-mysql
my-mysql
$ docker container ls -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
$ docker container run --name my-mysql -e MYSQL_ROOT_PASSWORD=admin -d -p 3306:3306 -v mysql-data:/var/lib/mysql mysql
64b96952639ad771ba7a758599df20ba490482aaeae23366c1c7e12fcdd23025
$ docker container ls
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS
                            NAMES
64b96952639a   mysql     "docker-entrypoint.s…"   23 seconds ago   Up 22 seconds   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   my-mysql

再起動したMySQLにmy_db_01があること

$ docker container exec -it my-mysql sh
sh-4.4# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.3.0 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

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> show databases;
]+--------------------+
| Database           |
+--------------------+
| information_schema |
| my_db_01           |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0