Windows2019系统用Docker容器部署.NET和Sql server完整流程和解释

外包公司开发的系统,.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"]}]'

 六,测试

参考另一篇文章有完整的测试文件和过程

猜你喜欢

转载自www.cnblogs.com/lxsky/p/12690708.html
今日推荐