基础知识准备:
1、安装Docker。
2、镜像和容器有基本的认识,知道是什么东西。
3、知道Docker的大概原理。
4、熟悉Docker容器和镜像操作的基本命令。
一、创建一个ASP.NET Core Web的项目,命名为[DockerDemo1],目的是为了看效果。所以得选择有默认结构的。
直接运行一下,能看到界面,没啥问题。
为了方便演示,我需要指定一下启动端口,修改Program.cs,设置成5000,不然默认就是80。
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder .UseUrls("http://*:5000") .UseStartup<Startup>(); });
二、在项目根目录下,编写Dockerfile文件,这个文件没有后缀名,可以先创建txt文件,再删除后缀名。
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env WORKDIR /app # Copy csproj and restore as distinct layers COPY *.csproj ./ RUN dotnet restore # Copy everything else and build COPY . ./ RUN dotnet publish -c Release -o out # Build runtime image FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 WORKDIR /app COPY --from=build-env /app/out . ENTRYPOINT ["dotnet", "DockerDemo1.dll"]
FROM:通常情况下,你要创建的镜像是依赖或者基于另外一个镜像的,这就需要使用FROM,当然也可以完全从头开始。
MAINTAINER:该镜像的维护人。
RUN:定义一些需要运行的命令,例如 npm install,dotnet restore等。
COPY:开发的时候,可以把源码放在Volumes里面,而在生产环境下,经常需要把代码复制到容器里面,使用COPY就可以做到。
ENTRYPOINT:它可以定义容器的入口,把容器配置成像exe一样的运行文件,通常是一些例如dotnet命令、Node命令等。
CMD:设置容器运行的默认命令和参数。当容器运行的时候,这个可以在命令行覆盖。
WORKDIR:设定容器运行的工作目录。
EXPOSE:暴露端口。
ENV:设定环境变量。
VOLUME:定义volume,并控制如何在宿主中进行存储。
三、打包镜像,将我们的ASP.NET Core项目打包成Docker镜像。
>cd [项目根目录] //docker文件就在根目录 >docker build -t 1140067636/mycoreweb .
11400676是我的Docker账户名,mycoreweb是自定义的镜像名称,这是我命名方法,当然你也可以随意命名,也可以加上tag,比如:Nginx:5.6
小数点代表本次执行的上下文路径,打包的时候,代表这个目录下所有的文件。
四、打包过程会依次拉取依赖的所有镜像,等待打包成功。
查询本地镜像,就可以看到名为[1140067636/mycoreweb]的镜像了。
此时,镜像已经打包到我们本地Docker服务了,本地可以使用。
docker run -d --name mycore -p 8080:5000 -v ${PWD}:/app/out 1140067636/mycoreweb
-d:后台运行的方式来运行,不然ASP.NET Core的宿主程序的日志会霸占控制台的界面,不好操作啊。
-p:端口设置,将容器的5000端口映射到宿主服务器的8080端口,因为程序的用的5000端口。
${PWD}:代表了当前路径,在Windows PowerShell中、Linux中通用,但是Windows如果使用CMD来操作的话,你得换成 %cd%
/app/out:是docker文件中,对应的COPY --from=build-env /app/out,相当于打包后的文件位置。
--name:给我的运行的容器示例,取个名字。
五、查看容器,已经创建成功了。
浏览器访问一下:http://localhost:8080
六、发布镜像,镜像不可能永远在本机嘛,分布式部署还需要部署到其他服务器去。
这时,我们需要把刚刚的镜像,推送到Docker Hub上,然后其他服务器就可以pull下来,直接创建容器了。
>docker login //需要登录Docker >docker push 1140067636/mycoreweb //推送本地镜像
七、模拟另一台服务器部署。
docker stop mycore //停止容器 docker rm mycore //删除容器 docker rmi 1140067636/mycoreweb //删除本地镜像 docker pull 1140067636/mycoreweb //拉取远程镜像 docker run -d -p 8080:5000 --name mycoreweb 1140067636/mycoreweb //创建新的容器
到这里就结束了,往往我们的项目不只是一个服务,可能有很多服务需要部署,比如mysql、订单、产品、用户中心等,这时候需要我们使用Docker Compose和容器网络来实现,将我们整个项目所需的服务一起运行,而容器网络,可以让Docker容器的隔离环境实现通信。
留下您的脚步
最近评论