Net core 2.x - docker(for windows)-linux配置及项目+SqlServer发布

发布日期:2019-03-26

将.net core2.x+sqlserver项目发布到docker.呵呵操作很自如如下.

1.罗嗦几句

在跑起来之前浪费了不少时间和精力起初是将docker for windows的环境转换成了 window(安装docker for windows之后右下角的小鲸鱼右击之后转换)但是很操蛋也做了随笔但是没有发布之保存了草稿记录了很多的问题以及问题的解决方式浪费了一天时间.跑起来之后感觉幸福来之不易所以拿出来分享下.下面看我们的效果图

 

2.效果预览

...其他内容

可以看到我们的项目成功跑起来并完成了在sql server数据库的迁移操作.

我们看下我们的项目是否可以正常访问(我这里映射的docker expose端口60000到外部端口 8089)

毫无悬念的可以访问到我们的界面了.和前几篇写的随笔的时候 熟悉的界面又回来了.下面就说下配置以及操作.

 3.环境及配置

3.1环境

我们要将项目发布到docker那么我们首要解决的就是docker的获取是的我们也就是用我们惯用的windwos环境安装docker for widnows

获取: https://www.docker.com/products/docker-desktop

选取您需要的版本即可.安装直接下一步下一步就行安装完成之后我们要看下我们的容器是windows还是linux因为这里我们使用的是 linux container 查看如下:

然后我们点击settings->Shared Drives选择你要和docker 共享的磁盘然后点击Advanced 分配你的CPU和内存即可参考如下我是默认的:

好的docker我们就简单的配置完了.下面就到了重要环节了此时如果你看过其他的入门的文章的话你可能绝的下一步骤就是创建项目 直接丢docker就可以泡起来了或者顶多在创建一个Dockerfile就行了.我告诉你低俗....你被骗了单纯跑一个项目是没任何问题的但是我们还要连接数据库(sql server)还要连接redismongodb等等...所以这里还没有配置完.要做的还不少呢.

 3.2配置

首先先确保我们的docker环境是有效的可以在cmd或者powershell中输入docker info如果不提示docker无效即可.不多说.

下面我们先获取下发布必须的相关镜像 (复制到cmd或者powershell直接回撤)当然这一步不是必需的因为我们一会儿在build我们项目对应的镜像的时候使用到的 相关镜像会自己下载安装:

docker pull microsoft/dotnet

docker pull microsoft/mssql-server-linux

将我们的core项目发布文件复制到指定的文件夹并cd到这个 文件夹中 在其中创建一个 Dockerfile的文件无后缀!!内容如下(参考):

# 基于microsoft/dotnet:2.1-sdk or dotnet:latest 默认latest 来创建我们的镜像FROM microsoft/dotnet#指定docker的工作目录为 esoftor-master文件夹也就是容器的默认的文件夹WORKDIR /usr/local/src/esoftor-api-master# docker对外暴露的端口EXPOSE 60000# 将当前文件夹下的所有文件全部复制到工作目录COPY . /usr/local/src/esoftor-api-master#CMD dotnet ESoftor.WebApi.dll 这里自行百度 CMD和ENTRYPOINT的区别ENTRYPOINT ["dotnet" "ESoftor.WebApi.dll"]

这时候我们的基础工作就完成了.Dockerfile在我们文件夹中位置如下(参考):

到这里我们哈需要继续配置另一个东西. docker-compose.yamldocker compose docker ......Docker Compose是Docker三剑客之一,用于定义和运行多个Docker容器应用,负责实现对 Docker 容器集群的快速编排。我们可以通过Dockerfile定义一个单独的应用容器。然而在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器等。Compose 恰好满足了这样的需求。它允许用户通过一个单独的 docker-compose.yml 配置板文件(YAML 格式)来定义一组相关联的应用容器。然后使用使用单个命令,就可以根据配置中创建并启动所有服务。但是值得我们庆幸的事情是官方很明确的有说明了docker for windows默认内置了Docker compose否则的话我们还需要单独安装.

我们cd到 上面截图的 上一层文件夹也就是Temp文件夹中.创建 一个名称为 docker-compose.yml 的文件.内容参考如下:(这里我只配置了sqlserver)只是为了掩饰core+sql server 在docker中可以跑起来:

version: "3"services: esoftor.api: image: esoftor.api:v1.0 environment: - ASPNETCORE_URLS=http://0.0.0.0:60000 - ConnectionString=Server=sql.dataUser=saPassword=520Tmc1314!Database=esoftor.source.novel2 build: context: ./netcoreapp2.1 dockerfile: Dockerfile ports: - "8089:60000" volumes: - ./netcoreapp2.1/:/usr/local/src/esoftor-api-master container_name: esoftor.api depends_on: - sql.data sql.data: image: microsoft/mssql-server-linux:2017-latest environment: - SA_PASSWORD=520Tmc1314! - ACCEPT_EULA=Y ports: - "14333:1433"

 

配置说明:

 version:不解释自行百度 docker compose 然后看官方解释看了也太大意义

 services:服务我们这里的服务就是esoftor.api和sql.data当然这个词是复数形式也就是说可以配置多个

   esoftor.api 和 sql.data 就是我们自定义的服务名称随便写

   image:生成的镜像名

   environment:服务环境的变量  ASPNETCORE_URLS=http://0.0.0.0:60000 即:监听的60000的端口这个和我们的Dockerfile中的EXPOSE是对应起来的.  ConnectionString:不解释但是要注意的是这里的 Server=的是我们配置的第二个服务的名称也就是sqlserver的服务名称.

   build:context:及Dockerfile所在的目录(因为上面我们已经cd到了项目的所在目录的上一级文件夹)  dockerfile:即dockerfile的文件名称

   ports:格式 外部端口:内部端口 这里的内部端口就是我们上面使用的 60000也是和dockerfile中是对应起来的.

   volumes:格式 项目路径:docker的运行目录---这里也是和Dockerfile中设置的 WORKDIR是对应的

        container_name:生成的容器的名称

        depends_on:顾名思义依赖项这里我们依赖了我们的另一个服务也就是访问数据库用的

  数据库配置:这里如果你的机器安装了Sql server数据库你会遇到一个问题就是 在执行的时候会发现1433(sqlserver)使用的被占用了不是废话吗所以上面参考配置中我是用的14333不是1433我是将14333映射到docker的1433端口并在 SQL SERVER 的网络配 MSSQLSERVER的TCP/IP的IP中修改了127.0.0.1的1433的默认配置为14333并设置为启用

 以上我们呢的基础工作就完成了下面开始愉快的玩耍起来吧.

 

4.创建镜像并运行项目

此时我们在cmd或者powershell中输入:docker-compose build

默默的等待执行完成吧.

完成之后继续输入:

docker-compose up

然后如果没有错误的话就可以看到我们开篇时候的截图了.