使用Docker搭建几大主流关系型数据库

数据库的安装配置往往是耗时费力的一个过程,不同厂商的数据库有不同的配置策略,但docker的容器技术可以使之变得简单。

从我过往的工作项目经历中、当前国内各公司使用的主流关系型数据库来看,mysql、sqlserver、postgres、oracle无疑是使用最广泛的几大数据库,因此来讲下如何使用docker创建这几个数据库的容器,然后使用数据库软件外部连接作为测试或学习使用。

在创建容器前,需要先安装好docker。

docker创建运行mysql容器


创建mysql容器

mysql可以选择特定版本的镜像下载,docker官方仓库mysql版本可参考 mysql镜像版本 ,用docker创建数据库容器需要考虑数据的持久化策略,这个可以通过挂载卷来解决。

下载mysql镜像

#下载mysql镜像,不指定版本默认为latest
docker pull mysql:5.7

#如想删除docker镜像可使用 docker rmi 镜像id

选读:在拉取docker镜像时,如果报下图的 permission denied 错误,说明当前用户没有权限操作docker,需要切换成root用户或者已加入docker组的用户来执行docker命令,或者将当前用户加到docker组内,这样以后就无需每次切换到root用户来执行docker命令了。


#在linux命令行查看docker组内现在的用户有哪些--执行下面命令后找到docker组,最后一个冒号后跟上的用户就是组内的用户
cat /etc/group
#将当前用户加入docker组,这里docker是组名,axlsss是要添加到组里的用户名
usermod -aG docker axlsss

在这里插入图片描述


#查看mysql镜像
docker images | grep mysql

在这里插入图片描述


创建mysql容器

#使用mysql镜像来创建容器
docker run -d -p 3306:3306 -v /var/lib/docker/volumes/mysql/conf:/etc/mysql/conf.d -v /var/lib/docker/volumes/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql3306 mysql:5.7
#如想删除docker容器可使用 docker rm 容器id

docker run参数释义:

  • -d:在后台运行容器
  • -p:小写p,第一个3306是宿主机端口(外部连接此容器数据库即使用此端口),第二个3306是容器内部端口
  • -v:卷挂载(可选项),这里使用的是指定路径挂载方式(指定宿主机挂载路径,路径可任意设置,此处使用docker默认位置),格式为(宿主机路径:容器内路径),即可将容器内重要文件挂载到宿主机指定位置,可实现在外部访问这些容器内文件,可以多次使用-v来挂载多个。另外还有匿名挂载和具名挂载方式,这两种方式挂载的位置没默认docker安装路径下,比如我的在/var/lib/docker/volumes/ 路径下面。注意宿主机上的挂载文件夹要提前创建(比如此处的mysql与mysql/data文件夹)。
  • -e:初始化mysql用户,设置root密码
  • –name:容器的名称
  • mysql:5.7:镜像名称:镜像tag

#查看创建完的容器
docker ps -a
#查看容器挂载卷信息,找到Mounts行
docker inspect 42189c7a7eae
#或者
docker volume ls

在这里插入图片描述


在这里插入图片描述


可以进入后台运行的mysql容器

#进入容器
docker exec -it 42189c7a7eae /bin/bash
#退出容器使用 exit

#退出容器,然后查看3306端口是否开启监听,如果是使用的服务器,还需要添加安全规则配置(入方向添加相应端口)
netstat -anlp | grep 3306

在这里插入图片描述



连接mysql

按上面步骤创建完mysql容器并且端口开启监听后,我们可以使用数据库软件在外部连接mysql使用。

此处使用datagrip软件来演示连接mysql数据库

  • 新建数据库连接
  • 填写 主机端口用户名密码 ,此处用户使用root,密码是上面创建日期时在 MYSQL_ROOT_PASSWORD=123456 处设置的密码
  • 点击测试连接,显示已成功表示可以连接到创建的容器mysql

在这里插入图片描述



mysql的使用测试

连接到mysql后,新建一个sql查询窗口进行使用测试

#创建一个测试schema
create schema test_schema;

#创建测试表
create table test_schema.test_table (
    id varchar(10)
);

#插入测试数据
insert into test_schema.test_table(id) values('1');commit;

#查询测试表数据
select * from test_schema.test_table;

以上语句都能正常运行,说明mysql数据库容器成功创建,然后到宿主机挂载mysql data的路径下可以看到刚刚创建的数据文件

#进入data卷挂载的路径下查看创建的时间文件
cd /var/lib/docker/volumes/mysql/data

在这里插入图片描述




docker创建运行sqlserver容器


创建sqlserver容器

sqlserver可以选择特定版本的镜像下载,docker官方仓库sqlserver版本可参考 sqlserver镜像版本 ,如需考虑sqlserver数据的持久化,也可以通过挂载卷来解决。

由于我用的是M1芯片ARM架构的Mac,docker hub中官方的sqlserver镜像并不支持此架构,故而不能使用。

但还是有办法在Mac M1的docker里使用sqlserver数据库的,只不过折中一下,通过Azure SQL Edge镜像创建的容器来使用sqlserver。

Azure SQL Edge 与 SQL Server 的关系

Azure SQL Edge 是基于最新版本的 SQL Server 数据库引擎构建的,提供行业领先的性能、安全性和查询处理功能。 由于 Azure SQL Edge 建立在与 SQL Server 和 Azure SQL 相同的引擎上,因此它提供相同的 Transact-SQL (T-SQL) 编程外围应用,使应用程序或解决方案的开发更简单且更快速,使应用程序在 IoT Edge 设备、数据中心和云之间的可移植性变得简单。


下载镜像(按架构选择其中之一下载)

#非ARM架构:sqlserver镜像下载
docker pull mcr.microsoft.com/mssql/server:2019-latest

#ARM架构:sqlserver镜像下载
docker pull mcr.microsoft.com/azure-sql-edge

#如想删除docker镜像可使用 docker rmi 镜像id

#非ARM架构:查看sqlserver镜像
docker images | grep mssql

#ARM架构:查看sqlserver镜像
docker images | grep azure-sql

在这里插入图片描述


在这里插入图片描述


创建sqlserver容器(按架构选择其中之一创建)

#非ARM架构:创建容器
docker run -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=12345678" -e 'MSSQL_PID=Developer' -e "MSSQL_USER=SA" --name mssql1433 --hostname mssql1433 mcr.microsoft.com/mssql/server:2019-latest 

#ARM架构:创建容器
docker run -d -p 1433:1433 -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=12345678" -e 'MSSQL_PID=Developer' -e "MSSQL_USER=SA" --name mssql1433 --hostname mssql1433 mcr.microsoft.com/azure-sql-edge:latest 

#如想删除docker容器可使用 docker rm 容器id

docker run参数释义:

  • -d:在后台运行容器
  • -p:小写p,第一个1433是宿主机端口(外部连接此容器数据库即使用此端口),第二个1433是容器内部端口
  • -e ACCEPT_EULA:Y表示接受最终用户许可协议
  • -e MSSQL_SA_PASSWORD:初始化sqlserver用户,设置sa用户密码,最好设置一个强密码
  • -e MSSQL_PID:设置 SQL Server 版本,默认为Developer,其他可选值有:
    • Developer : 默认值,以开发版运行
    • Express : 以学习版运行
    • Standard : 以标准版运行
    • Enterprise : 以企业版运行
    • EnterpriseCore : 以企业核心版运行
  • -e MSSQL_USER:
  • –name:容器的名称
  • –hostname:设置容器主机名,如果未指定则默认为容器 ID,主机名最好和容器名称保持一致
  • 最后加上 镜像名称:镜像tag
  • 如果想挂载文件,可以使用-v参数,sqlserver容器内的数据文件路径为 /var/opt/mssql/data 日志文件路径为 /var/opt/mssql/log

#查看创建完的容器
docker ps -a

在这里插入图片描述


可以进入后台运行的mssql容器

#进入容器
docker exec -it 75acc537c784 /bin/bash
#退出容器使用 exit

#退出容器,然后查看1433端口是否开启监听,如果是使用的服务器,还需要添加安全规则配置(入方向添加相应端口)
netstat -anlp | grep 1433

在这里插入图片描述



连接sqlserver

按上面步骤创建完mssql容器并且端口开启监听后,我们可以使用数据库软件在外部连接使用。

此处使用datagrip软件来演示连接数据库

  • 新建数据库连接
  • 填写 主机端口实例用户名密码 ,此处用户使用SA,密码是上面创建日期时在 MSSQL_SA_PASSWORD=12345678 处设置的密码
  • 点击测试连接,显示已成功表示可以连接到创建的容器

在这里插入图片描述


sqlserver的使用测试

连接到sqlserver后,新建一个sql查询窗口进行使用测试

--连接到tempdb数据库
use tempdb;

--创建一个测试schema
create schema test_schema;

--创建测试表
create table test_schema.test_table (
    id varchar(10)
);

--插入测试数据
insert into test_schema.test_table(id) values('1');

--查询测试表数据
select * from test_schema.test_table;

以上语句都能正常运行,说明sqlserver数据库容器成功创建




docker创建运行postgres容器


创建postgres容器

postgres可以选择特定版本的镜像下载,docker官方仓库postgres版本可参考 postgres镜像版本 ,用docker创建数据库容器需要考虑数据的持久化策略,这个可以通过挂载卷来解决。

下载postgres镜像

#下载postgres镜像,不指定版本默认为latest,此处选择13.9版本
docker pull postgres:13.9

#如想删除docker镜像可使用 docker rmi 镜像id

#查看postgres镜像
docker images | grep postgres

在这里插入图片描述


创建postgres容器

#使用postgres镜像来创建容器
docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 --restart always --name postgres5432 postgres:13.9
#如想删除docker容器可使用 docker rm 容器id

docker run参数释义:

  • -d:在后台运行容器
  • -p:小写p,第一个5432是宿主机端口(外部连接此容器数据库即使用此端口),第二个5432是容器内部端口
  • -e POSTGRES_PASSWORD:设置数据库密码,默认用户名为postgres
  • –restart always:容器退出时,docker总是自动重启这个容器
  • postgres:13.9:镜像名称:镜像tag
  • 如果想挂载文件,可以使用-v参数,postgres容器内的重要文件路径为 /var/lib/postgresql

#查看创建完的容器
docker ps -a

在这里插入图片描述


可以进入后台运行的mysql容器

#进入容器
docker exec -it 7ac6f09eca5f /bin/bash
#退出容器使用 exit

#退出容器,然后查看5432端口是否开启监听,如果是使用的服务器,还需要添加安全规则配置(入方向添加相应端口)
netstat -anlp | grep 5432

在这里插入图片描述



连接pstgres

  • 新建数据库连接
  • 填写 主机端口用户名密码数据库 ,此处用户和数据库默认为postgres,密码是上面创建日期时在 POSTGRES_PASSWORD=123456 处设置的密码
  • 点击测试连接,显示已成功表示可以连接到创建的容器

在这里插入图片描述



postgres的使用测试

连接到postgres后,新建一个sql查询窗口进行使用测试

--创建一个测试schema
create schema test_schema;

--创建测试表
create table test_schema.test_table (
    id varchar(10)
);

--插入测试数据
insert into test_schema.test_table(id) values('1');commit;

--查询测试表数据
select * from test_schema.test_table;

以上语句都能正常运行,说明postgres数据库容器成功创建


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值