【转】使用Linux下Docker部署MSSQL并加载主机目录下的数据库
使用Linux下Docker部署MSSQL并加载主机目录下的数据库
0.部署条件
部署MSSQL for Linux需要4G内存
我是在虚拟机中测试的,关闭防火墙,使虚拟机能上网
1.下载镜像
务必配置阿里镜像加速
mkdir /opt/mssqldata
docker pull microsoft/mssql-server-linux
2.创建并运行容器
缺省情况下,Docker中的SQL Server是开发者版本(Developer Edition),功能与企业版相同,但是仅能用于开发或者测试环境,不得用于生产环境
如果是开发环境,命令如下
docker run \
--name mssql \
--restart always \
--privileged=true \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \
-v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \
-p 1433:1433 \
-d microsoft/mssql-server-linux
1
2
3
4
5
6
7
8
9
密码应符合 SQL Server 默认密码策略,否则容器无法设置 SQL Server,将停止工作。 默认情况下, 密码的长度必须至少为8个字符, 并且包含以下四个集中的三个字符:大写字母、小写字母、十进制数字和符号。 可以通过执行 docker logs 命令检查错误日志。替换yourStrong(!)Pass456成你自己的密码就行。
如果是Linux服务器,可以不用端口映射,直接使用宿主模式,如下:
docker run \
--name mssql \
--restart always \
--privileged=true \
--net=host
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \
-v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \
-d microsoft/mssql-server-linux
1
2
3
4
5
6
7
8
9
如果是运行生产容器映像,命令如下:
docker run \
--name sqlent \
--restart always \
--privileged=true \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_SA_PASSWORD=yourStrong(!)Pass456' \
-e 'MSSQL_PID=Enterprise' \
-v /opt/mssqldata/:/var/opt/mssql/data/mydata/ \
-p 1433:1433 \
-d microsoft/mssql-server-linux
1
2
3
4
5
6
7
8
9
10
注意,多了**-e ‘MSSQL_PID=Enterprise’ **这行
3.进入容器
docker exec -it mssql /bin/bash
4.使用mssql命令行工具
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P ‘yourStrong(!)Pass456’
5.用图形化工具SQL Server Management Studio创建一个数据库testdb
选择数据库文件存放在/var/opt/mssql/data/mydata下
然后执行SQL语句
select @@VERSION;
go
SELECT Name from sys.Databases;
go
use testdb;
go
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT);
go
INSERT INTO Inventory VALUES (1, ‘banana’, 150);
INSERT INTO Inventory VALUES (2, ‘orange’, 154);
SELECT * FROM Inventory WHERE quantity > 152;
go
6.停止容器并删除
sudo docker stop mssql
sudo docker rm mssql
7.再次运行docker
执行如上第2、3步,运行并进入docker
然后在命令行状态下,手动mount数据库
>EXEC sp_attach_db @dbname = 'testdb',
>@filename1 = '/var/opt/mssql/data/mydata/testdb.mdf',
>@filename2 = '/var/opt/mssql/data/mydata/testdb_log.ldf'
>GO
1
2
3
4
然后再执行第5步测试数据都正常还在。
注:如果docker没有rm,就是没有删除,则都会正常加载的,就不再需要attach数据库文件了。也就是启停不会影响数据库的。
8.参考文档
•Run the SQL Server 2017 container image with Docker
•Docker Repository: microsoft/mssql-server-linux
————————————————
https://blog.csdn.net/tikiyou/article/details/113117507
相关文章
- Linux文件共享(一)——进程与打开文件
- 查看linux系统是32位还是64位的方法
- Linux 性能调优内存篇:工具命令篇
- Docker打包错误:Failed to execute goal com.spotify:docker-maven-plugin:1.2.0:build (default-cli) on project security
- docker探索-CentOS7中配置Docker的yum源并升级安装docker1.13(十)
- Linux/CentOS 搭建 SVN 项目
- 【Linux】在linux上java工具jps jstat jinfo等命令找不到怎么办
- 每天一个linux命令(24):Linux文件类型与扩展名
- Linux rm删除大批量文件
- java 11 完全支持Linux容器(包括Docker)
- 07_Linux 终端命令格式
- 查看LINUX当前负载
- docker镜像构建,Docker 镜像和容器的导入导出
- Docker - docker in docker(dind)
- Linux Stress测压工具安装与使用详解
- linux一键安装docker命令
- 【Linux网络编程】TCP select聊天程序
- linux ,cron定时任务 备份mysql数据库
- y27.第二章 Docker从入门到精通 -- docker 仓库之分布式Harbor(九)
- L67.linux命令每日一练 -- 第十章 Linux网络管理命令 -- netstat和ss
- L45.linux命令每日一练 -- 第七章 Linux用户管理及用户信息查询命令 -- sudo和id
- 学习笔记 | Linux内核精讲
- 【云原生之Docker实战】使用docker部署Monica个人开源CRM系统
- Linux系统之安装Linux管理工具inpanel
- GO语言教程(一)Linux( Centos)下Go的安装, 以及HelloWorld
- Linux: Intel Eethernet driver:ixgbe & i40e;error “Adapter removed“
- Linux中shell内外命令讲解(下)
- Docker学习笔记18:docker实例之redis 集群搭建
- 多台Linux虚拟机配置——集群化环境前置准备
- 嵌入式Linux开发,Ubuntu下交叉编译内核报错:error while loading shared libraries: /lib/x86_64-linux-gnu/libc++.so:
- 【看表情包学Linux】插叙:实现简易的 Shell | 通过内建命令实现路径切换 | 再次理解环境变量