zoukankan      html  css  js  c++  java
  • 使用docker部署Asp.net core web应用程序

     

    执行以下命令拉取aspnetcore2.2镜像:

    [root@localhost ~]# docker pull mcr.microsoft.com/dotnet/core/aspnet:2.2

    拉取成功后执行docker images命令,如果能看到aspnetcore镜像,则表示拉取成功。

    [root@localhost ~]# docker images
    REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
    mcr.microsoft.com/dotnet/core/aspnet    2.2              521411f3b61d        3 days ago          261 MB

    制作自己的应用镜像

    1.创建Dockerfile文件

    我们先在临时目录创建Dockerfile,待会我们的asp.net core web应用也会放在临时目录。

    [root@localhost ~]# cd /tmp
    [root@localhost tmp]# vi Dockerfile

    将下面代码拷贝进去,保存并退出。

    FROM docker.io/microsoft/aspnetcore
    WORKDIR /app
    COPY ./songlou .
    EXPOSE 8080
    CMD ["dotnet", "SongLou.Web.dll"]

    注:上面设置的EXPOSE 8080,不需要跟launchSettings.json的

    applicationUrl属性中设置的端口一致,applicationUrl中的端口只是在调试时起作用。经过实验,这儿端口随便设置。关于端口更多信息可查看本文尾。
     

    对上面五行代码做下说明:

    FROM表示新镜像所依赖的基础镜像。

    WORKDIR表示你的asp.net core web应用放在容器的哪个目录,这里是/app目录,没有会自动创建

    COPY表示拷贝当前系统下的哪个目录,这里是songlou目录,把要发布的网站拷贝到该目录下面

    EXPOSE表示暴露出来的端口号,和容器的端口号对应。这里默认是80。

    CMD表示执行的命令,即运行我们自己的asp.net core web程序。

    想办法将你的asp.net core web发布程序拷贝到centos系统的/tmp里面,COPY对应的目录,如下:

    COPY ./songlou .

    2.创建镜像

    [root@localhost tmp]# docker build -t mycore .

    后面的英文符号“.”不能去掉,mycore表示你的镜像名称。如果出现Step1-Step5,则表示镜像创建成功。

     
    Sending build context to Docker daemon 7.426 MB
    Step 1/5 : FROM docker.io/microsoft/aspnetcore
     ---> c4ca78cf9dca
    Step 2/5 : WORKDIR /app
     ---> Using cache
     ---> 1ddb7788a4a9
    Step 3/5 : COPY ./songlou .
     ---> bfad39b69b61
    Removing intermediate container c9170e38b598
    Step 4/5 : EXPOSE 8080
     ---> Running in 7b5381a9e64c
     ---> be22e6986e1d
    Removing intermediate container 7b5381a9e64c
    Step 5/5 : CMD dotnet SongLou.Web.dll
     ---> Running in 697cdaf9d864
     ---> 44150b234924
    Removing intermediate container 697cdaf9d864
    Successfully built 44150b234924
     

    再次查看所有镜像

    [root@localhost tmp]# docker images

    再次查看所有镜像,我们会看到:

    REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
    mycore                           latest              44150b234924        About a minute ago   332 MB
    docker.io/microsoft/dotnet   latest              521411f3b61d        3 days ago          1.73 GB

    除了我们从官网拉取的aspnetcore镜像,还有一个我们自己创建的镜像:mycore。

    3.运行容器

    [root@localhost tmp]# docker run --name mycore -p 8080:80 -d mycore

    第一个mycore表示容器名称,第二个mycore表示镜像名称

    注意 -p 8080:80端口号,前面是对外的端口号,可随便设置,通过http://ip:8080访问,后面是容器对外的端口,但又不是上面EXPOSE 8080设置的端口,可查看容器运行日志,.net core程序默认是以80端口启动的,这就是上面容器端口为什么是80。

    执行后会出现新容器的ID:2859330db3a5c6113b0ccdf6e9d78e7e36ea17f6c4de495514c4ec8901ed9218

    4.执行curl命令访问我们的网站

    [root@localhost tmp]# curl http://localhost:8080

    运行结果:

    {"str":"test","environmen":null,"username":null,"password":null}

    [root@localhost tmp]# curl http://192.168.1.160:8080

    用IP访问看到的结果也是一样的:

    {"str":"test","environmen":null,"username":null,"password":null}

    或者是在windows操作系统里的浏览器地址栏输入:http://192.168.1.160:8080/看到的结果也是一样的。

    至此大功告成。

    5.进入容器

    [root@localhost tmp]# docker exec -it mycore /bin/bash

    exec命令可以进入docker容器,然后像使用centos操作系统一样。在里面进行操作。


    查看容器日志,发现

    Now listening on: http://[::]:80

    这就能解释上面的端口疑问了

    [root@localhost demo]# docker logs 6028d7b75923786c43a543ff8f61d1088140434ab4b70a28856b707154351912
    warn: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[35]
          No XML encryptor configured. Key {cacdd312-37fe-43de-95a0-c7ce2e475b96} may be persisted to storage in unencrypted form.
    Hosting environment: Production
    Content root path: /app
    Now listening on: http://[::]:80
    Application started. Press Ctrl+C to shut down.
    [root@localhost demo]#

    .net core可以通过如下代码设置启动端口,不设置的话就是上面的默认80端口

    WebHost.CreateDefaultBuilder(args)
                    .UseKestrel()
                    .UseIISIntegration()
                    .UseUrls("http://*:9001")
                    .UseStartup<Startup>();

    通常的Dockfile是这样

    FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
    WORKDIR /app
    COPY ./WebApplication16 .
    EXPOSE 9002
    CMD ["dotnet", "WebApplication16.dll", "--server.urls", "http://*:9002"]
    "--server.urls", "http://*:9002"这两没实际作用,就是命令行参数,除非在.net core中接收命令行参数做处理
    EXPOSE 9002 这个貌似设置成啥都可以
  • 相关阅读:
    解读dbcp自动重连那些事
    dbcp重连问题排查
    Redis 历史版本下载URL
    jackson 完整Jar包
    Linux缺少动态连接库.so--cannot open shared object file: No such file or directory
    多模匹配--历程
    利用poi操作word文档
    Java word 内容读取
    光纤存储和服务器架构总结
    FastDFS和集中存储方式对比
  • 原文地址:https://www.cnblogs.com/xtjatswc/p/10286755.html
Copyright © 2011-2022 走看看