docker创建数据库容器并映射存储数据
- 介绍
- 创建Redis容器
- 创建PostgresQL容器
- 创建MySQL容器
 
介绍
使用Docker创建Redis、PostgresQL、MySQL等数据库容器代码示例。
创建Redis容器
使用Docker创建Redis容器并使用Volume映射存储数据是一个常见的操作。以下是详细的步骤:
-  创建一个目录用于存储Redis数据: 
 首先,创建一个目录用于存储Redis的数据。例如,我们创建一个名为/mydata/redis/data的目录。mkdir -p /mydata/redis/data**PS:**如果需要 Docker volume 来保存 Redis 的数据,执行下面的命令来创建一个名为 redis_data 的 volume: docker volume create redis_data
-  创建并运行Redis容器: 
 使用Docker命令创建并运行Redis容器,并将本地目录映射到容器内的数据目录。docker run -d \--name my-redis \-v /mydata/redis/data:/data \ # 如果是使用docker volume 则改为 -v redis_data:/data-p 6379:6379 \redis redis-server --appendonly yes解释一下这个命令: - -d:以 detached 模式运行容器(后台运行)。
- --name my-redis:为容器指定一个名称。
- -v /mydata/redis/data:/data:将本地的- /mydata/redis/data目录映射到容器内的- /data目录。
- -p 6379:6379:将容器的6379端口映射到主机的6379端口。
- redis redis-server --appendonly yes:使用Redis镜像并启动Redis服务器,启用AOF持久化。
 
-  验证容器是否运行: 
 可以使用以下命令查看容器是否正在运行:docker ps你应该会看到一个名为 my-redis的容器正在运行。
-  测试Redis连接: 
 你可以使用redis-cli工具连接到Redis服务器进行测试。docker exec -it my-redis redis-cli这将打开Redis命令行界面,你可以在这里执行Redis命令,例如: 127.0.0.1:6379> set mykey "Hello, Redis!" OK 127.0.0.1:6379> get mykey "Hello, Redis!"
-  验证数据持久化: 
 停止并删除容器,然后重新创建容器,验证数据是否仍然存在。docker stop my-redis docker rm my-redis重新创建并运行容器: docker run -d \--name my-redis \-v /mydata/redis/data:/data \-p 6379:6379 \redis redis-server --appendonly yes再次连接到Redis并检查数据: docker exec -it my-redis redis-cli 127.0.0.1:6379> get mykey "Hello, Redis!"如果数据仍然存在,说明Volume映射和数据持久化成功。 
创建PostgresQL容器
使用Docker创建PostgreSQL容器并使用Volume映射存储数据到本地目录的步骤如下:
-  创建一个目录用于存储PostgreSQL数据: 
 首先,创建一个目录用于存储PostgreSQL的数据。例如,我们创建一个名为/mydata/postgresql/data的目录。mkdir -p /mydata/postgresql/dataPS: 如果需要 Docker volume 来保存 MySQL 的数据,执行下面的命令来创建一个名为 postgresql_data 的 volume: docker volume create postgresql_data
-  创建并运行PostgreSQL容器: 
 使用Docker命令创建并运行PostgreSQL容器,并将本地目录映射到容器内的数据目录。docker run -d \--name my-postgresql \-v /mydata/postgresql/data:/var/lib/postgresql/data \ # 如果是使用docker volume 则改为 -v postgresql_data:/data-e POSTGRES_PASSWORD=mysecretpassword \-p 5432:5432 \postgres:latest解释一下这个命令: - -d:以 detached 模式运行容器(后台运行)。
- --name my-postgresql:为容器指定一个名称。
- -v /mydata/postgresql/data:/var/lib/postgresql/data:将本地的- /mydata/postgresql/data目录映射到容器内的- /var/lib/postgresql/data目录。
- -e POSTGRES_PASSWORD=mysecretpassword:设置PostgreSQL的超级用户密码。
- -p 5432:5432:将容器的5432端口映射到主机的5432端口。
- postgres:latest:使用最新版本的PostgreSQL镜像。
 
-  验证容器是否运行: 
 可以使用以下命令查看容器是否正在运行:docker ps你应该会看到一个名为 my-postgresql的容器正在运行。
-  测试PostgreSQL连接: 
 你可以使用psql客户端工具连接到PostgreSQL服务器进行测试。docker exec -it my-postgresql psql -U postgres这将打开PostgreSQL命令行界面,你可以在这里执行SQL命令,例如: postgres=# CREATE DATABASE mydatabase; CREATE DATABASEpostgres=# \c mydatabase You are now connected to database "mydatabase" as user "postgres".mydatabase=# CREATE TABLE mytable (id INT PRIMARY KEY, name VARCHAR(255)); CREATE TABLEmydatabase=# INSERT INTO mytable (id, name) VALUES (1, 'Hello, PostgreSQL!'); INSERT 0 1mydatabase=# SELECT * FROM mytable;id | name ----+-----------------1 | Hello, PostgreSQL! (1 row)
-  验证数据持久化: 
 停止并删除容器,然后重新创建容器,验证数据是否仍然存在。docker stop my-postgresql docker rm my-postgresql重新创建并运行容器: docker run -d \--name my-postgresql \-v /mydata/postgresql/data:/var/lib/postgresql/data \-e POSTGRES_PASSWORD=mysecretpassword \-p 5432:5432 \postgres:latest再次连接到PostgreSQL并检查数据: docker exec -it my-postgresql psql -U postgres执行以下SQL命令: postgres=# \c mydatabase You are now connected to database "mydatabase" as user "postgres".mydatabase=# SELECT * FROM mytable;id | name ----+-----------------1 | Hello, PostgreSQL! (1 row)如果数据仍然存在,说明Volume映射和数据持久化成功。 
创建MySQL容器
使用Docker创建MySQL容器并使用Volume映射存储数据到本地目录的步骤如下:
-  创建一个目录用于存储MySQL数据: 
 首先,创建一个目录用于存储MySQL的数据。例如,我们创建一个名为/mydata/mysql/data的目录。mkdir -p /mydata/mysql/dataPS: 如果需要 Docker volume 来保存 MySQL 的数据,执行下面的命令来创建一个名为 mysql_data 的 volume: docker volume create mysql_data
-  创建并运行MySQL容器: 
 使用Docker命令创建并运行MySQL容器,并将本地目录映射到容器内的数据目录。docker run -d \--name my-mysql \-v /mydata/mysql/data:/var/lib/mysql \ # 如果是使用docker volume 则改为 -v mysql_data:/data-e MYSQL_ROOT_PASSWORD=my-secret-pw \-p 3306:3306 \mysql:latest解释一下这个命令: - -d:以 detached 模式运行容器(后台运行)。
- --name my-mysql:为容器指定一个名称。
- -v /mydata/mysql/data:/var/lib/mysql:将本地的- /mydata/mysql/data目录映射到容器内的- /var/lib/mysql目录。
- -e MYSQL_ROOT_PASSWORD=my-secret-pw:设置MySQL的root用户密码。
- -p 3306:3306:将容器的3306端口映射到主机的3306端口。
- mysql:latest:使用最新版本的MySQL镜像。
 
-  验证容器是否运行: 
 可以使用以下命令查看容器是否正在运行:docker ps你应该会看到一个名为 my-mysql的容器正在运行。
-  测试MySQL连接: 
 你可以使用mysql客户端工具连接到MySQL服务器进行测试。docker exec -it my-mysql mysql -uroot -p输入之前设置的密码 my-secret-pw,这将打开MySQL命令行界面,你可以在这里执行SQL命令,例如:mysql> CREATE DATABASE mydatabase; Query OK, 1 row affected (0.01 sec)mysql> USE mydatabase; Database changedmysql> CREATE TABLE mytable (id INT PRIMARY KEY, name VARCHAR(255)); Query OK, 0 rows affected (0.02 sec)mysql> INSERT INTO mytable (id, name) VALUES (1, 'Hello, MySQL!'); Query OK, 1 row affected (0.01 sec)mysql> SELECT * FROM mytable; +----+--------------+ | id | name | +----+--------------+ | 1 | Hello, MySQL!| +----+--------------+ 1 row in set (0.00 sec)
-  验证数据持久化: 
 停止并删除容器,然后重新创建容器,验证数据是否仍然存在。docker stop my-mysql docker rm my-mysql重新创建并运行容器: docker run -d \--name my-mysql \-v /mydata/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \-p 3306:3306 \mysql:latest再次连接到MySQL并检查数据: docker exec -it my-mysql mysql -uroot -p输入密码后,执行以下SQL命令: mysql> USE mydatabase; Database changedmysql> SELECT * FROM mytable; +----+--------------+ | id | name | +----+--------------+ | 1 | Hello, MySQL!| +----+--------------+ 1 row in set (0.00 sec)如果数据仍然存在,说明Volume映射和数据持久化成功。