外包公司开发的系统,.net framework+sql server,大的要死,公司要求容器化部署。查了很多资料,没有人这个干过,容器化选择都是linux,走了很多弯路终于成功windows server2019 DataCenter下搞定。记录一下,留待有缘人。
一、环境安装
1.1、安装SSH:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 设定服务器自动启动 Set-Service sshd -StartupType Automatic Set-Service ssh-agent -StartupType Automatic Start-Service sshd Start-Service ssh-agent
1.2、安装docker
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force Install-Package -Name docker -ProviderName DockerMsftProvider -Force docker -v 启动 Start-Service docker 这里重启一下
1.3、配置加速器,没发现有用,还是配好吧,万一有用呢:
C:\ProgramData\docker\config\daemon.json
{ "registry-mirrors": [ "https://cd6xo91e.mirror.aliyuncs.com"] }
1.4、安装docker-compose
Invoke-WebRequest https://github.com/docker/compose/releases/download/1.25.4/docker-compose-Windows-x86_64.exe -UseBasicParsing -OutFile $env:ProgramFiles\docker\docker-compose.exe
二、自定义路径的数据库docker
2.1我这里测试,没有数据库,自己先准备一个数据库,创建一个自定义路径的数据库XD
USE master GO CREATE DATABASE XD ON PRIMARY ( NAME='xiding_data',--主文件逻辑文件名 FILENAME='c:\sqldb\xiding_data.mdf', --主文件文件名 SIZE=5mb,--系统默认创建的时候会给主文件分配初始大小 MAXSIZE=500MB,--主文件的最大值 filegrowth=15%-- 主文件的增长幅度 ) LOG ON ( name='xiding_log',--日志文件逻辑文件名 filename='c:\sqldb\xiding_log.ldf',--日志文件屋里文件名 SIZE=5MB,--日志文件初始大小 filegrowth=0 --启动自动增长 ) GO
2.2创建数据表
USE XD create table users ( id int identity(1,1) not null primary key, name nvarchar(50) null, age nvarchar(50) null, ) go
2.3随便加点数据
数据库准备好后把文件复制到docker主机目录,准备把这个目录挂载到docker里面
三、在mssql的镜像里面sqlserver启动后需要将上面数据库附加进去
--声明数据库引用 use master; go --附加数据库 create database XD on (filename='c:\sqldb\xiding_data.mdf'), (filename='c:\sqldb\xiding_log.ldf') for attach go
四,最后docker-compose.yml
version: "3.4" services: weifu_asp: image: mcr.microsoft.com/dotnet/framework/samples:aspnetapp environment: VIRTUAL_HOST: http://admin.shxidsy.com links: - weifu_db ports: - "80:80" volumes: - ./www:c:/inetpub/wwwroot container_name: weifu_asp weifu_db: image: christianacca/mssql-server-windows-express volumes: - ./sql:C:\sqldb environment: ACCEPT_EULA: Y SA_PASSWORD: xdRoot11 attach_dbs: '[{"dbName":"XD","dbFiles":["c:\\sqldb\\xiding_data.mdf","c:\\sqldb\\xiding_log.ldf"]}]' ports: - "9000:1433" container_name: weifu_db
注意:attach_dbs: '[{"dbName":"XD","dbFiles":["c:\\sqldb\\xiding_data.mdf","c:\\sqldb\\xiding_log.ldf"]}]'这句是附加数据库的,这里目录一定要用 双斜杠,害死人了啊
五、其它注意及解释
1、windows下的.net framework(docker)
windows主机的docker支持.net framework和.net core;linux主机的docker只支持.net core
就是说.net framework只能在windows主机里的docker下使用,但是这个超级大:docker pull mcr.microsoft.com/dotnet/framework/samples:dotnetapp
2、windows下的sql server也叫mssql(docker)
windows下的sql server超级大,基本下载不下来microsoft/mssql-server-windows-express,可以用christianacca/mssql-server-windows-express替代
docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Sa111111' -p 1433:1433 -v c:\sqldb:c:\sqldb --name mssql -d christianacca/mssql-server-windows-express
不能映射原始数据库的文件夹到主机,否则会一直提示失败,原因没具体查,只能映射是其他文件夹,比如c:\sqldb,最后在附加到数据库连接操作。
在docker-compose.yml里面通过 volumes映射该目录到主机,通过attach_dbs附加数据库到master。
volumes: - ./sql:C:\sqldb environment: attach_dbs: '[{"dbName":"XD","dbFiles":["c:\\sqldb\\xiding_data.mdf","c:\\sqldb\\xiding_log.ldf"]}]'
六,测试
参考另一篇文章有完整的测试文件和过程