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

本文涉及的产品
云数据库 RDS SQL Server,独享型 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: 快速学习 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
相关文章
|
1月前
|
SQL API 流计算
实时计算 Flink版产品使用合集之在Mac M1下的Docker环境中开启SQL Server代理的操作步骤是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
164 1
|
25天前
|
应用服务中间件 Shell nginx
mac m1笔记本docker 安装nginx
mac m1笔记本docker 安装nginx
74 4
|
25天前
|
Ubuntu Linux 应用服务中间件
MAC在Linux上上传本地文件压缩包(tomcat)解决方法(炒鸡详细)
MAC在Linux上上传本地文件压缩包(tomcat)解决方法(炒鸡详细)
|
3天前
|
数据可视化 Shell Linux
技术笔记:Linux学习笔记1
技术笔记:Linux学习笔记1
|
11天前
|
网络协议 安全 Linux
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
|
16天前
|
Linux Docker Python
【docker】Mac M1 构建 x64 linux镜像
【docker】Mac M1 构建 x64 linux镜像
28 0
|
1月前
|
SQL 运维 Linux
SQL基础(1),从三流Linux运维外包到秒杀阿里P7,
SQL基础(1),从三流Linux运维外包到秒杀阿里P7,
|
1月前
|
Docker 容器
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
mac构建Docker镜像报错failed to solve with frontend dockerfile.v0: failed to create LLB definition: unexpec
38 0
|
1月前
|
大数据 Linux Docker
mac docker 宿主机和容器间网络打通
mac docker 宿主机和容器间网络打通
24 0
|
1月前
|
NoSQL Redis Docker
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
Mac上轻松几步搞定Docker与Redis安装:从下载安装到容器运行实测全程指南
159 0