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
相关文章
|
9天前
|
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
|
9天前
|
SQL 安全 数据库
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
Web安全漏洞专项靶场—SQL注入—docker环境—sqli-labs靶场—详细通关指南
36 1
|
22天前
|
Linux 数据库 数据安全/隐私保护
|
24天前
|
应用服务中间件 Linux nginx
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
这篇文章讨论了Linux虚拟机磁盘扩容的方法,包括外部配置、具体扩容步骤和扩容后的效果验证。同时,文章还涉及了Docker容器磁盘满的问题及其解决方法,如删除不必要的镜像和容器,以及调整Docker的安装路径。此外,还提到了意外情况的处理,例如误删除停止的容器后的应对措施。最后,文章还提供了使用Docker安装nginx的步骤和成功访问的截图。
Linux虚拟机磁盘扩容、Docker容器磁盘满的问题、Docker安装nginx
|
24天前
|
关系型数据库 MySQL Linux
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
这篇文章提供了在Linux系统中使用Docker安装Mysql 5.7版本的详细过程和图解,包括安装指定版本、创建实例、启动、使用Navicat连接测试、文件挂载与端口映射、进入容器、配置文件修改以及重新启动容器等步骤。
一文教会你如何在Linux系统中使用Docker安装Mysql 5.7版本 【详细过程+图解】
|
30天前
|
存储 Linux Docker
Linux——快速安装Docker
Linux——快速安装Docker
89 1
|
18天前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
20天前
|
Linux 持续交付 虚拟化
在Linux中,Docker和容器虚拟概念是什么?
在Linux中,Docker和容器虚拟概念是什么?
|
2月前
|
关系型数据库 Linux 数据库
如何在Linux云服务器上通过Docker Compose部署安装Halo,搭建个人博客网站?
本文指导用户如何在Linux服务器上使用Docker Compose部署Halo博客系统。首先确保拥有Linux服务器并安装Docker及Docker Compose。接着创建文件夹(例如`~/halo`),用于存放所有Halo相关数据。可以选择不同的Halo Docker镜像源,推荐使用具体版本而非`latest`标签以避免误操作。示例中提供了三种`docker-compose.yaml`配置方法:Halo+PostgreSQL、Halo+MySQL以及使用默认的H2数据库。每种配置都包括网络设置、健康检查和环境变量。
69 1
|
21天前
|
存储 Kubernetes Linux
在Linux中,如何使用Docker和Kubernetes管理容器?
在Linux中,如何使用Docker和Kubernetes管理容器?