Docker的好处就不多说了,网上博客描述多的很,总之就是要解决“在我电脑上还好好的”类似这种部署问题。对于Win10系统,据说只支持Win10 专业版的。注册DockHub账户地址:https://hub.docker.com/。
1:下载Docker for Windows Installer
下载入口:
文件还是比较大的,有834M。按着提示一步安装下去。成功之后运行桌面图标,在右下角任务栏出现Docker的图标,右键出现:
使用你注册的账户登陆到Docker Hub。
检测是否安装成功
打开cmd命令窗口,输入:docker --version
出现版本号表示安装成功了。
2:安装Kitematic
步骤1中的“Kitematic”选项,这个是管理容器的工具,对于容器的启动,暂停,删除等是相当方便的。
3:创建.Net Core 控制台程序
之前的选择项目类型不多叙述。 在步骤3中,注意选择“启用Docker 支持”,按着下边的提示(需要Docker Desktop),一定要提前安装好Docker for Windows Installer。生成的项目中自动包含一个Dockerfile文件:
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:2.1-nanoserver-1803 AS build
WORKDIR /src
COPY ["WebApp/WebApp.csproj", "WebApp/"]
RUN dotnet restore "WebApp/WebApp.csproj"
COPY . .
WORKDIR "/src/WebApp"
RUN dotnet build "WebApp.csproj" -c Release -o /app
FROM build AS publish
RUN dotnet publish "WebApp.csproj" -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApp.dll"]
至于FROM ,WORKDIR,COPY关键字的含义,自己动手查询一下即可。
修改CreateWebHostBuilder
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5001")
.UseStartup<Startup>();
- 增加UseUrls 【5001 表示要监听的端口】
修改Configure
- 输入“Hello World v1”。
4:发布项目
选中项目右键-》发布
选择启动-》文件夹-》发布,发布成功会输出信息
同时发布界面也有部分改变
- 目标位置 【发布之后的文件路径】
- 配置 【注意在Release文件夹下】
5:修改Dockerfile文件
将Dockerfile拷贝到Docker文件夹下,与Output文件夹同一级,这里对Dockerfile进行一下修改。
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 5001
COPY Output /app/
#EXPOSE 443
#
#FROM mcr.microsoft.com/dotnet/core/sdk:2.1-nanoserver-1803 AS build
#WORKDIR /src
#COPY ["WebApp/WebApp.csproj", "WebApp/"]
#RUN dotnet restore "WebApp/WebApp.csproj"
#COPY . .
#WORKDIR "/src/WebApp"
#RUN dotnet build "WebApp.csproj" -c Release -o /app
#
#FROM build AS publish
#RUN dotnet publish "WebApp.csproj" -c Release -o /app
#
#FROM base AS final
#WORKDIR /app
#COPY --from=publish /app .
ENTRYPOINT ["dotnet", "WebApp.dll"]
- EXPOST 5001 【在CreateWebHostBuilder中配置的端口】
- COPY Output /app/ 【发布文件路径中的Output文件夹】
- 中间注释的部分
6:使用PowerShell创建镜像
在步骤2中启动PowerShell或者在Docker文件夹下按着“Shift”键-右键选项。
执行Build命令 :
docker build -t lxxservice:v1 D:\测试\WideWorldImporters.API\WebApp\bin\Release\netcoreapp2.1\publish\Docker
- lxxservice:v1 表示镜像名称以及版本,版本不指定默认为latest。【名称貌似只能是小写字母】
查看镜像,输入:
docker images
7:创建容器
查看当前容器
输入cmd:
docker ps
- CONTAINER ID 容器ID 【目前只存在2个容器】
为镜像lxxservice:v1 创建容器
输入cmd:
docker run -p 5002:5001 lxxservice:v1
- 5002 表示映射到本机的端口 【在浏览器或者posman中输入这个端口】
- 5001 表示容器的端口 【在CreateWebHostBuilder中配置的端口】
查看容器信息
输入cmd:
docker ps
- 画线部分为新创建的容器以及镜像信息
- CONTAINER ID 数量现在为3个
在浏览器中输入:http://localhost:5002/
步骤可能有些简单,不过还是捣鼓出来了。有机会在Lunix系统上部署一下试试。