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


      大概快有一年的时间没有碰过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的速度,可以在https://cr.console.aliyun.com/cn-huhehaote/instances/mirrors 中看见,我的内容如下,完事之后就可以享受加速了。

    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命令。

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

    就这样我们去构建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

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

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

    另外

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

    ENTRYPOINT ["dotnet", "Jwt_Policy_Demo.dll","urls=http://*:5003"]
  • 相关阅读:
    [HNOI2008] Cards
    loj #136
    a problem
    dp * 3
    STL
    套题1
    luogu 4211
    loj #2319
    loj #2316
    luogu 1144
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/12147302.html
Copyright © 2020-2023  润新知