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

简介: 快速学习 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 的目录这样用户的数据库就一直在里面了

相关文章
|
6月前
|
算法 数据挖掘 数据库
通过 SQL 快速使用 OceanBase 向量检索学习笔记
通过 SQL 快速使用 OceanBase 向量检索学习笔记
|
6月前
|
SQL 数据库
SQL 学习笔记 - 多表关系与多表查询
数据库多表关系包括一对多、多对多和一对一,常用外键关联。多表查询方式有隐式/显式内连接、外连接、子查询等,支持别名和条件筛选。子查询分为标量、列、行、表子查询,常用于复杂查询场景。
|
12月前
|
存储 Docker 容器
Docker Volumes卷详解及时区、时间同步设置技巧
总的来说,Docker卷是一种强大的数据持久化和数据共享工具,而Docker的时区和时间同步设置则可以帮助你更好地管理和使用你的容器。希望这些信息能够帮助你更好地理解和使用Docker。
476 75
|
9月前
|
Linux iOS开发 Docker
MyEMS开源系统安装之Linux/macOS上的DOcker
本指南详细介绍了如何在Linux/macOS上使用Docker部署MyEMS系统。主要内容包括:前置条件(如安装Docker、npm和MySQL),以及分步骤部署各个组件(如myems-api、myems-admin、myems-modbus-tcp等)。每个步骤涵盖源代码复制、环境配置、镜像构建、容器运行及日志管理等操作,并提供了多平台构建的支持。最后,指南还说明了默认端口和登录凭据,帮助用户快速启动并访问MyEMS的管理界面和Web界面。
295 1
|
11月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
504 28
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
Linux 网络安全 虚拟化
linux怎么把文件传到docker里面
在现代应用开发中,Docker作为流行的虚拟化工具,广泛应用于微服务架构。文件传输到Docker容器是常见需求。常用方法包括:1) `docker cp`命令直接复制文件;2) 使用`-v`选项挂载宿主机目录,实现数据持久化和实时同步;3) 通过SCP/FTP协议传输文件;4) 在Dockerfile中构建镜像时添加文件。选择合适的方法并确保网络安全是关键。
1437 1
|
Linux 虚拟化 Docker
Linux服务器部署docker windows
在当今软件开发中,Docker成为流行的虚拟化技术,支持在Linux服务器上运行Windows容器。流程包括:1) 安装Docker;2) 配置支持Windows容器;3) 获取Windows镜像;4) 运行Windows容器;5) 验证容器状态。通过这些步骤,你可以在Linux环境中顺利部署和管理Windows应用,提高开发和运维效率。
1947 1
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
1017 19