欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

[笔记]使用Docker部署.NET Core应用程序

程序员文章站 2022-06-11 16:51:32
大概快有一年的时间没有碰过docker了,理由很简单,基本上都是在IIS上部署,看到很多大佬都开始Devops持续化集成了,还有就是用Linux守护进程很恶心,哈哈,但相对来说成本会更高,但对于大型团队来说还是不错的,这不?不想被大伙甩下,哈哈,赶紧捞回来点丢下的知识,这篇文章就算是对我自己的笔记吧 ......

  大概快有一年的时间没有碰过docker了,理由很简单,基本上都是在iis上部署,看到很多大佬都开始devops持续化集成了,还有就是用linux守护进程很恶心,哈哈,但相对来说成本会更高,但对于大型团队来说还是不错的,这不?不想被大伙甩下,哈哈,赶紧捞回来点丢下的知识,这篇文章就算是对我自己的笔记吧...docker 中 有ee 和 ce 两个版本,其中ee是开源的,ce是闭源的。

在linux中安装docker容器

首先我们需要检查linux内核是否大于3.1.0,通过该命令查看。

[root@izenarrdqnvpc4z ~]# uname -r
3.10.0-1062.1.2.el7.x86_64

随后我们安装docker必要的一些必要的工具,可以提前安装。

yum install -y yum-utils device-mapper-persistent-data lvm2

现在可以直接装docker了,使用命令如下

sudo wget -qo- https://get.docker.com | sh

随后检查docker版本,看看是否安装成功?

[root@izenarrdqnvpc4z ~]# docker version
client: docker engine - community
 version:           19.03.5
 api version:       1.40
 go version:        go1.12.12
 git commit:        633a0ea
 built:             wed nov 13 07:25:41 2019
 os/arch:           linux/amd64
 experimental:      false
cannot connect to the docker daemon at unix:///var/run/docker.sock. is the docker daemon running?

现在想要使用docker image 以及 docker ps 等命令还不可以,因为你还没有start docker 服务。使用这俩命令来开启与关闭docker服务。

start docker.service  //开启
stop docker.service   //关闭

由于我是用的阿里服务器,它给我提供了镜像加速器,这主要是为了提高拉取docker hub的速度,可以在 中看见,我的内容如下,完事之后就可以享受加速了。

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'eof'
{
  "registry-mirrors": ["https://baqadmms.mirror.aliyuncs.com"]
}
eof
sudo systemctl daemon-reload
sudo systemctl restart docker

在.net core工程中编写dockerfile文件。

#see https://aka.ms/containerfastmode to understand how visual studio uses this dockerfile to build your images for faster debugging.
#应用基础镜像
from mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim as base
#工作目录
workdir /app
#将整个publish文件 放到该文件下生产
copy . /app
#指定对外端口
expose 5003
#启动命令
entrypoint ["dotnet", "jwt_policy_demo.dll"]

因为我的应用程序是单一部署,所以不存在动态端口  所以我这边直接useurls了。

public static ihostbuilder createhostbuilder(string[] args) =>
            host.createdefaultbuilder(args)
                .configurewebhostdefaults(webbuilder =>
                {
                    webbuilder.usestartup<startup>();
                    webbuilder.useurls("http://*:5003");
                });

现在通过dotnet命令发布项目,一定记得把dockerfile文件属性改为输出到输出目录哦~,随后你可以现在windows中进行测试了,例如dotnet xxx.dll命令。

[笔记]使用Docker部署.NET Core应用程序

随后通过filezilla上传到linux目录中publish文件夹中,当然这也是我自己的爱好,因为它的命名很符合现在的场景。

[笔记]使用Docker部署.NET Core应用程序

就这样我们去构建build,通过linux命令cd到发布文件夹中,然后通过build命令构建镜像,我们发现刚刚的dockerfile的命令,一步一步都执行成功了。

[root@izenarrdqnvpc4z jwtweb]# docker build -t jwtdemo .
sending build context to docker daemon   22.9mb
step 1/5 : from mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim as base
3.0-buster-slim: pulling from dotnet/core/aspnet
8ec398bc0356: pull complete 
9584d2ef7ebe: pull complete 
62b61706cd9b: pull complete 
676f1d13ec65: pull complete 
35ddfe9ef309: pull complete 
digest: sha256:de2b03f916d1f3a72d342825c3ec4414d0190862b20d2af295320334f17a1480
status: downloaded newer image for mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
 ---> c7e868fda63d
step 2/5 : workdir /app
 ---> running in 385a30e2b223
removing intermediate container 385a30e2b223
 ---> b95c2a722df5
step 3/5 : copy . /app
 ---> 48edf64106cd
step 4/5 : expose 5003
 ---> running in d4bf7b3b7122
removing intermediate container d4bf7b3b7122
 ---> 752724a940e8
step 5/5 : entrypoint ["dotnet", "jwt_policy_demo.dll"]
 ---> running in 9c0c2c190da3
removing intermediate container 9c0c2c190da3
 ---> 4045861329a7
successfully built 4045861329a7
successfully tagged jwtdemo:latest

随后通过docker images 查看生成镜像是否成功,ok没问题,现在就可以run了...

[root@izenarrdqnvpc4z jwtweb]# docker images
repository                             tag                 image id            created             size
jwtdemo                                latest              4045861329a7        2 minutes ago       230mb
mcr.microsoft.com/dotnet/core/aspnet   3.0-buster-slim     c7e868fda63d        7 days ago          207mb

在docker run 中指定外部和docker内部中的映射规则  --name 是容器的名称,而最后面的是使用的所使用的镜像。

[root@izenarrdqnvpc4z jwtweb]# docker run --name jwtweb -d -p 8000:5003 jwtdemo
36c4d4f8218adeeafa737f51f0975dfe8d6aa6d17435cefc355749a59c6298a2
[root@izenarrdqnvpc4z jwtweb]# docker ps -a
container id        image               command                  created             status              ports                    names
36c4d4f8218a        jwtdemo             "dotnet jwt_policy_d…"   7 seconds ago       up 6 seconds        0.0.0.0:8000->5003/tcp   jwtweb

[笔记]使用Docker部署.NET Core应用程序

非常简单,我刚刚发布的网站地址如下: ..

超超超超超级简单的dockerfile github地址在:传送门 ..

另外

如果不通过useurls来进行启动的话,那么可以该下dockerfile的entrypoint 如下

entrypoint ["dotnet", "jwt_policy_demo.dll","urls=http://*:5003"]