docker创建数据库容器并映射存储数据

news/2024/10/18 5:50:06/

docker创建数据库容器并映射存储数据

介绍

使用Docker创建Redis、PostgresQL、MySQL等数据库容器代码示例。

创建Redis容器

使用Docker创建Redis容器并使用Volume映射存储数据是一个常见的操作。以下是详细的步骤:

  1. 创建一个目录用于存储Redis数据
    首先,创建一个目录用于存储Redis的数据。例如,我们创建一个名为/mydata/redis/data的目录。

    mkdir -p /mydata/redis/data
    

    **PS:**如果需要 Docker volume 来保存 Redis 的数据,执行下面的命令来创建一个名为 redis_data 的 volume:

    docker volume create redis_data
    
  2. 创建并运行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持久化。
  3. 验证容器是否运行
    可以使用以下命令查看容器是否正在运行:

    docker ps
    

    你应该会看到一个名为my-redis容器正在运行。

  4. 测试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!"
    
  5. 验证数据持久化
    停止并删除容器,然后重新创建容器,验证数据是否仍然存在。

    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映射存储数据到本地目录的步骤如下:

  1. 创建一个目录用于存储PostgreSQL数据
    首先,创建一个目录用于存储PostgreSQL的数据。例如,我们创建一个名为/mydata/postgresql/data的目录。

    mkdir -p /mydata/postgresql/data
    

    PS: 如果需要 Docker volume 来保存 MySQL 的数据,执行下面的命令来创建一个名为 postgresql_data 的 volume:

    docker volume create postgresql_data
    
  2. 创建并运行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镜像。
  3. 验证容器是否运行
    可以使用以下命令查看容器是否正在运行:

    docker ps
    

    你应该会看到一个名为my-postgresql容器正在运行。

  4. 测试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)
    
  5. 验证数据持久化
    停止并删除容器,然后重新创建容器,验证数据是否仍然存在。

    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映射存储数据到本地目录的步骤如下:

  1. 创建一个目录用于存储MySQL数据
    首先,创建一个目录用于存储MySQL的数据。例如,我们创建一个名为/mydata/mysql/data的目录。

    mkdir -p /mydata/mysql/data
    

    PS: 如果需要 Docker volume 来保存 MySQL 的数据,执行下面的命令来创建一个名为 mysql_data 的 volume:

    docker volume create mysql_data
    
  2. 创建并运行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镜像。
  3. 验证容器是否运行
    可以使用以下命令查看容器是否正在运行:

    docker ps
    

    你应该会看到一个名为my-mysql容器正在运行。

  4. 测试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)
    
  5. 验证数据持久化
    停止并删除容器,然后重新创建容器,验证数据是否仍然存在。

    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映射和数据持久化成功。


http://www.ppmy.cn/news/1514830.html

相关文章

服务路由(Service Routing)

服务路由(Service Routing)是微服务架构中的一个关键概念,涉及将客户端的请求路由到合适的服务实例上。在分布式系统中,通常会有多个服务实例提供相同的功能,为了实现负载均衡、高可用性和故障隔离,服务路由…

91. UE5 RPG 实现拖拽装配技能以及解除委托的绑定

在上一篇文章里,实现了通过选中技能,然后点击下方的装备技能插槽实现了技能的装配。为了丰富技能装配功能,在这一篇里,我们实现一下通过拖拽技能,实现拖拽功能,我们需要修改两个用户控件,一个就…

使用uart串口配置TMC2209模块

串口配置的优点: 通过串口助手配置TMC2209的寄存器实现转速,方向,细分数等寄存器设置。最大细分可达256。 TMC2209串口配置数据发送格式: 通过数据手册可知,TMC2209写入数据需要发送64位16进制。 前面0~7位是同步保…

如何在Rocky Linux 9上安装Django

更新软件包 dnf check-update dnf install dnf-utils安装Python3和pip dnf install python3 python3-pip通过pip安装Django pip3 install Django验证Django安装是否成功 django-admin --version 4.2.15可以显示版本号(4.2.15),说明安装成功 创建一个简单Django…

你不知道的 length属性之JavaScript基础

实例属性:在面向对象编程(OOP)中,实例属性是指属于对象(实例)的属性。它们是类的一个实例特有的数据,用于存储对象的状态或特征。每个实例属性都是特定对象的一部分,不同的对象可以有不同的实例…

React antd Table表格动态合并单元格

注意: ① 采用的是React antDsign 4.x版本 ② 需重新处理data数据 实现效果 代码实现 import React from react; import { Table } from antd;const data [{key: 0,name: 张三,age: 22,sex: 男,},{key: 1,name: 李四,age: 42,sex: 男,},{key: 2,name: 小丽,age: …

MySQL——多表操作(一)外键(3)添加外键约束的参数说明

我们知道建立外键是为了保证数据的完整和统一性,但如果主表中的数据被删除或修改,从表中对应的数据该怎么办?很明显,从表中对应的数据也应该被删除,否则数据库中会存在很多无意义的垃圾数据。MySQL 可以在建立外键时添加 ON DELE…

海莲花活跃木马KSRAT加密通信分析

1.概述 自2023年8月至今,海莲花组织多次利用KSRAT远控木马对我国发起攻击。KSRAT通过HTTP协议与C&C服务器进行通信,每个样本都使用了不同的URL。其心跳包采用XOR算法进行加密,而控制指令包和数据回传包则使用了XOR以及“XORAES-128-CBC”…