在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
执行以下命令拉取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中的端口只是在调试时起作用。经过实验,这儿端口随便设置。关于端口更多信息可查看本文尾。
对上面五行代码做下说明:
想办法将你的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 这个貌似设置成啥都可以
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论