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/data
PS: 如果需要 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/data
PS: 如果需要 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映射和数据持久化成功。