Mac 版SQL On Linux Docker Volumes|学习笔记

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: 快速学习 Mac 版 SQL On Linux Docker Volumes

开发者学堂课程【SQL Server on Linux入门教程Mac版SQL On Linux Docker Volumes】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/386/detail/4847


Mac版SQL On Linux Docker Volumes


内容介绍

一、问题

二、References

三、Is that Ture

四、解决方法


一、问题

1、How can we save our database for persistence if we run SQL on Linux on Docker?

2、How can we do 1st problem on Mac Docker?

SQL server On Linux 跑在 Docker 里面有什么问题按照前一章节只是一个 SQL server On Linux 实例跑在 Docker 容器里面但它有一个问题如果在实例里面创建数据库它的生命周期跟 Docker 容器生命周期是一起的也就是 Docker 容器被删除数据库也会不见Docker 的基础知识里面有一个叫 volume 的东西 Docker 的数据保存在母体机某一个目录里面 Docker 销毁或回收之后volume 里的数据是会保留下来的那么可以这种方法解决这个问题

 

二、References

https://docs.microsoft.com/en-us/sqlinux/sql-server-linux setup-docker

1NoteThe ACCEPT_ EULA and SA PASSWORD environment variables are requiredto run the image.

2、Important
Volume mapping for Docker-machine on Mac with the SQL Server on Linux image is not supported at thistime.

但是微软的官方文件SQL server On Linux 跑在 mac 版的 Docker 是不支持这一特性的可是在测试下来是可以实现本节主要讲解如何突破官方文档

 

三、Is that Ture

docker生命周期和SQL server 生命周期一致的问题。

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSW0RD=SQL0nLinux@123' -p 41433:1433 -d mic.cosaft/mssal-server-linux

这个是映射到母体机的41433端口连接41433端口可以查看一下服务是否起来创建测试的数据库Docker 容器里面 SQL server 实例上面创建 testdb,并且创建一个测试表测试两条数据代码如下

IF DB_ID('TestDb')IS NULL

CREATE DATABASE TestDb;

GOUSE TestDbGOIF OBJECT_ ID('dbo.Test', 'U') IS NOT NULL

DROP TABLE dbo.TestGOCREATE TABLE dbo.Test(RowID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY ,

Name VARCHAR(20) NOT NULL);INSERT INTO dbo.TestSELECT 'A' UNION ALL SELECT'B';SELECT * FROM dba.Test;

接下来把 Docker 容器销毁掉输入Docker stop 8c1202ff7a33把 Docker 实例停掉接着把 Docker 容器删除docker stop 8c1202ff7a33 

8c1202ff7a33docker rm8c1202ff7a33

8c1202ff7a33
再把 Docker 启动起来再看一下数据库还在不在如果不在说明刚才那个问题是存在的数据库已经不见了Docker 容器被回收以后数据库就消失了数据已经丢失了这是面对的问题解决之前先把实例删掉会占用端口做测试

docker run -e 'ACCEPT_ EULA=Y' -e 'SA_ PASSW0RD=SQL0nLinux@123' -p 41433:1433 -d miccosaft/mssql-server-linuxWHERE WAS OUR TESTING DATABASE DATA GOEN? -- it has been gone and we lost it already.docker run -e ' ACCEPT_ EULA=Y' -e 'SA_ PASSW0RD=SQL0nLinux@123' -p 41433:1433 -V

/Users/cherish/Downloads/linuxsqldata:/var/opt/mssql -it miccosoft/mssql-server-linux

看一下微软讲的是不是正确的有一个-V的参数Docker容器里面的目录映射在母体机的这个目录去/Users/cherish/Downloads/linuxsqldata就是数据库文件存放在/var/opt/mssql实际上是存放在母体机的目录里面Docker 容器被回收以后母体机的目录数据是不会被回收的这样就达到一个数据被保留下来的目的看一下 mac 版的 Docker 是不是支持这个功能可以看这个目录里面有没有东西可以看到错误已经抛出来了让去检查这个日志/var/opt/mssql/log就是微软讲的 mac 版是不支持的

 

四、解决方法

解决 SQL server On Linux 跑在 mac 版的 Docker 并且让 docker 生命周期和 SQL server 生命周期不一致。

首先创建一个 volume目录命名为sql41433data创建完成

docker create -V/var/opt/mssql--name sql41433data miccosoft/mssql-server-linux

用这条语句就是加了一条参数并且给 Docker 容器取了一个名字
docker run -e 'ACCEPT_EULA=Y'-e'SA_PASSW0RD=SQL0nLinux@123' -p 41433:1433 --volumes-from sql41433data -it--name linuxsql41433 miccosoft/mssql- server-Linux

启动完成后,创建测试的数据库数据库已经存在测试表
IF DB_ID('TestDb')IS NULL

CREATE DATABASE TestDb;

GO

USE TestDbGOIF OBJECT_ ID('dbo.Test', 'U') IS NOT NULL DROP TABLE dbo.TestGOCREATE TABLE dbo.Test(RowID INT IDENTITY(1,1) NOT NULL PRIMARY KEY

Name VARCHAR(20) NOT NULL);

NSERT INTO dbo.TestSELECT 'A' UNION ALL SELECT'B';SELECT * FROM dba.Test;

先把停止Docker

docker stop

销毁 Docker 容器
locker rm

再次启动 Docker 容器之后再去检查测试数据库是不是存在表是不是存在存在就说明已经解决了这个问题
locker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSW0RD=SQL0nLinux@123' -p 41433:1433 --volumes-niccosoft/mssql-server-linux

总结SQL server 跑在 Linux 平台的 Docker Docker 容器生命周期和 Docker容器里面实例的数据库是一样的一旦 Docker 容器消失或者被删除SQL server 实例上所有的数据库就不见了数据就丢失了如果要解决这个问题就要引入 volume 这个技术但是根据微软官方文章的说法 volume 技术在 mac 版上是不支持的这事例去讲怎么 mac 版怎么去支持 volume 技术最终达到 Docker 容器生命周期与数据库生命周期隔离开的问题解决这个问题就可以解决 Docker 容器的数据库没有了要想把用户的数据库保留下来只需要把用户的 volume 的目录的数据库指到以前没有的实例上面对应的 volume 的目录这样用户的数据库就一直在里面了

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
11天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
33 2
|
12天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
24 3
|
1月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
231 4
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
14天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
139 2
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
2月前
|
Linux Docker 容器
linux之docker命令
linux之docker命令
|
1月前
|
Linux 开发工具 Docker
各个类linux服务器安装docker教程
各个类linux服务器安装docker教程
54 0
|
2月前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
270 1
|
3月前
|
Linux 数据库 数据安全/隐私保护
|
3月前
|
Kubernetes Linux Docker
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误
【Azure 应用服务】使用Docker Compose创建App Service遇见"Linux Version is too long. It cannot be more than 4000 characters"错误