zl程序教程

您现在的位置是:首页 >  系统

当前栏目

docker for windows--快速搭建各种关系型数据库RMDB的测试环境

DockerWindows数据库 快速 -- 搭建 for 关系
2023-09-11 14:16:24 时间

在实际工作中,需要搭建关系型数据库(RMDB)进行功能的测试与验证,本文基于docker镜像,提供针对关系型数据库MySQL、PostgreSQL、SQLServer测试数据库的快速搭建。

包含了拉取关系型数据库(RMDB)并启动容器,创建数据库、用户及相应的授权操作,最后提供建表及示例数据,用于进行功能测试验证。

MySQL

单机版

拉取并启动容器

docker pull mysql:5.7.30

# 正式使用
docker run -d --name mysql5.7 -p 13306:3306 -v D:/docker/mysql/single/log:/var/log/mysql -v D:/docker/mysql/single/data:/var/lib/mysql -v D:/docker/mysql/single/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root  mysql:5.7.30

# 测试期间使用,可以快速的定位容器启动或使用过程中的问题
docker run --rm --name mysql5.7 -p 13306:3306 -v D:/docker/mysql/single/log:/var/log/mysql -v D:/docker/mysql/single/data:/var/lib/mysql -v D:/docker/mysql/single/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root  mysql:5.7.30

创建数据库及用户

使用 mysql -hlocalhost -P13306 -uroot -proot 进入mysql客户端

CREATE USER 'dbuser'@'%' IDENTIFIED BY 'abc@1234';
grant all privileges on *.* to 'dbuser'@'%' identified by 'abc@1234';

FLUSH PRIVILEGES;

之后,就可以使用 mysql -hlocalhost -P13306 -udbuser -pabc@1234 进行进入mysql客户端

产生示例数据

CREATE DATABASE test;

CREATE TABLE customers (
  id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(30) NOT NULL,
  addr VARCHAR(30) NOT NULL,
  email VARCHAR(50),
  registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


INSERT INTO customers (name, addr, email)
VALUES ('John', '广州市', 'john@example.com'),
       ('Jane', '广州市', 'jane@example.com'),
       ('Bob', '广州市', 'bob@example.com'),
	   ('Alice', '广州市', 'alice@example.com'),
       ('张三', '广州市', 'david@example.com'),
       ('李四', '广州市', 'emily@example.com'),
       ('Frank', '广州市', 'frank@example.com'),
       ('Grace', '广州市', 'grace@example.com'),
       ('赵六', '广州市', 'henry@example.com'),
       ('Isabella', '广州市', 'isabella@example.com'),
       ('Jacob', '广州市', 'jacob@example.com'),
       ('Karen', '广州市', 'karen@example.com'),
       ('Linda', '广州市', 'linda@example.com');

主从集群

参见《docker for windows–MySQL 5.7.x 主从及主从复制配置及问题解决》

postgresql

详见参见 docker安装postgresql

docker pull postgres:12.14-alpine3.17

docker run --rm --name pg12 -v D:/docker/rmdb/pg/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=Test123 -p 5432:5432 postgres:12.14-alpine3.17

创建数据库及用户

进入容器

docker exec -it pg12 bash
su - postgres
psql -U postgres
#或执行如下命令,但需要输入上面定义的密码
psql -h localhost -d testdb -U postgres -W

然后执行如下命令:

create database testdb TEMPLATE template0 ENCODING 'utf8' ;
create user pguser with password '123456';
--允许用户用于登录
ALTER USER pguser WITH login;
grant all privileges on database testdb to pguser;

然后就可以使用如下命令执行SQL语句
psql -h localhost -d testdb -U pguser -W

产生示例数据

CREATE TABLE customers (
  id serial PRIMARY KEY,
  name VARCHAR(30) NOT NULL,
  addr VARCHAR(30) NOT NULL,
  email VARCHAR(50),
  registration_date timestamp NOT NULL DEFAULT NOW()
);

INSERT INTO customers (name, addr, email)
VALUES ('John', '广州市', 'john@example.com'),
       ('Jane', '广州市', 'jane@example.com'),
       ('Bob', '广州市', 'bob@example.com'),
	   ('Alice', '广州市', 'alice@example.com'),
       ('张三', '广州市', 'david@example.com'),
       ('李四', '广州市', 'emily@example.com'),
       ('Frank', '广州市', 'frank@example.com'),
       ('Grace', '广州市', 'grace@example.com'),
       ('赵六', '广州市', 'henry@example.com'),
       ('Isabella', '广州市', 'isabella@example.com'),
       ('Jacob', '广州市', 'jacob@example.com'),
       ('Karen', '广州市', 'karen@example.com'),
       ('Linda', '广州市', 'linda@example.com');

sqlserver

拉取并启动容器

部署参考:
部署并连接到 SQL Server Linux 容器
通过Docker部署并配置SQLServer

#拉取镜像
docker pull mcr.microsoft.com/mssql/server:2019-latest

# 运行容器
#运行MS SQLServer, 容易出现的错误是密码不满足要求,SQLServer的要求是至少8位且需要由大写字母、小写字母、数字、符号中的至少3种组成
docker run --rm --name SQLServer -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Abc12345" -p 1433:1433 --hostname sqlserver1 mcr.microsoft.com/mssql/server:2019-latest

# 进入容器
docker exec -it SQLServer bash

#连接到sqlserver
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Abc12345"

SQL操作

包含创建数据库、创建用户并授权
注意:和PostgreSQL有一点点相似,SQLServer也是将用户分为了登录用户和数据库用户的,所以需要分别创建

CREATE DATABASE testdb;
SELECT Name from sys.Databases;
go
create login dbuser with password='abc@1234', default_database=testdb;
create user dbuser for login dbuser with default_schema=dbo;
go
#授予所有权限
exec sp_addrolemember 'db_owner', 'dbuser';
go
use testdb;
go
CREATE TABLE customers (  id Int PRIMARY KEY,  name NVARCHAR(30) NOT NULL,  addr NVARCHAR(30) NOT NULL,  email NVARCHAR(50));
INSERT INTO customers (id,name, addr, email) VALUES (1,'John', N'广州市', 'john@example.com'),(2,'Jane', N'广州市', 'jane@example.com'),(3,'Bob', N'广州市', 'bob@example.com'), (4,'Alice', N'广州市', 'alice@example.com'),(5,N'张三', N'广州市', 'david@example.com'), (6,N'李四', N'广州市', 'emily@example.com'), (7,'Frank', N'广州市', 'frank@example.com'),(8,'Grace', N'广州市', 'grace@example.com'), (9,'赵六', N'广州市', 'henry@example.com'),(10,'Isabella', N'广州市', 'isabella@example.com'),(11,'Jacob', N'广州市', 'jacob@example.com'),(12,'Karen', N'广州市', 'karen@example.com'),(13,'Linda', N'广州市', 'linda@example.com');
go
select * from customers;
go

退出后,可以使用
/opt/mssql-tools/bin/sqlcmd -S localhost -U dbuser -P "abc@1234" -d testdb 直接进入操作。