asp.net怎么生成json数据_[随笔]利用 VS2019 + NET5.0 生成镜像部署

周末闲来无事儿,就在docker上玩玩NET5.0的简单部署。其实还有很多没有涉及到,比如守护、多环境发布。现在主要是接触Java比较多些,以后再逐步的完善NET这块。

技术栈

  • VS2019 16.8+
  • NET5.0
  • NetCore API 项目
  • Docker latest

新建项目

  • 选择 Docker support:可以自动生成基于所选版本 NET5.0 生成当前项目的 Dockerfile 文件

81c0c442bd1cf0d89461dfbd6ab60148.png

  • 本地 VS 中 docker 调试模式

fc199fb946f34a0fad4ac62a26e63e37.png

  • 编写一个 controller

namespace MyDockerAppWeb.Controllers
{
[ApiController]
[Route("[controller]")]
public class HomeController : ControllerBase
{
[HttpGet]
public string Index()
{
return "success";
}

[HttpGet]
[Route("getList")]
public List<string> GetList()
{
return new List<string>() { "a", "b", "c" };
}
}
}

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/aspnet:5.0-buster-slim AS base
# WORKDIR
WORKDIR /app

# 对外暴露80、443端口
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src

# COPY [--chown=:] ["",... ""]
COPY ["MyDockerAppWeb.csproj", ""]
# 还原依赖
RUN dotnet restore "./MyDockerAppWeb.csproj"
COPY . .
WORKDIR "/src/."

# Release方式构建项目,并输出到 /app/build文件夹下
RUN dotnet build "MyDockerAppWeb.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyDockerAppWeb.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app

COPY --from=publish /app/publish .

# ENTRYPOINT ["","","",...]
ENTRYPOINT ["dotnet", "MyDockerAppWeb.dll"]

# 设置时区
#ENV TZ=Asia/Shanghai
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

0238f56c6c2e7d0c2ce650ab91f8d46a.png

docker-command-review

生成自定义镜像

  • 在项目根目录(有 Dockerfile 文件的路径下),运行以下命令

docker build -t {镜像名} . 特别注意:最后一个点,表示当前目录,不能缺少 比如:docker build -t hager/mynet5api:v20201115 .

  • 运行镜像

docker run --name {为容器指定一个名称} -d -p {暴露访问端口}:{镜像项目中端口} {镜像名}:{版本号}比如:docker run -d -p 8080:80 --name mynet5 hager/mynet5api:v20201115

PS E:\netcore-workspace\source\repos\MyDockerAppWeb> ls


目录: E:\netcore-workspace\source\repos\MyDockerAppWeb


Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/11/15 11:06 .config
d----- 2020/11/15 11:36 bin
d----- 2020/11/15 11:55 Controllers
d----- 2020/11/15 11:40 obj
d----- 2020/11/15 11:06 Properties
-a---- 2020/11/15 9:49 340 .dockerignore
-a---- 2020/11/15 9:49 162 appsettings.Development.json
-a---- 2020/11/15 9:49 192 appsettings.json
-a---- 2020/11/15 18:24 1129 Dockerfile
-a---- 2020/11/15 11:11 912 MyDockerAppWeb.csproj
-a---- 2020/11/15 11:47 739 MyDockerAppWeb.csproj.user
-a---- 2020/11/15 11:57 1364 MyDockerAppWeb.sln
-a---- 2020/11/15 9:49 724 Program.cs
-a---- 2020/11/15 18:21 4243 readme.md
-a---- 2020/11/15 9:49 1818 Startup.cs
-a---- 2020/11/15 9:49 310 WeatherForecast.cs


PS E:\netcore-workspace\source\repos\MyDockerAppWeb> docker build -t hager/mynet5api:v20201115
[+] Building 7.1s (18/18) FINISHED
=> [internal] load build definition from Dockerfile 0.1s
=> [internal] load .dockerignore 0.1s
=> [internal] load metadata for mcr.microsoft.com/dotnet/sdk:5.0-buster-slim 0.4s
=> [internal] load metadata for mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim 0.0s
=> [base 1/2] FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim 0.0s
=> [build 1/7] FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim@sha256:34736bfaece7ca4314b1b91977db555167da98e8 0.0s
=> [internal] load build context 0.1s
=> => transferring context: 9.97kB 0.0s
=> CACHED [build 2/7] WORKDIR /src 0.0s
=> CACHED [build 3/7] COPY [MyDockerAppWeb.csproj, ] 0.0s
=> CACHED [build 4/7] RUN dotnet restore "./MyDockerAppWeb.csproj" 0.0s
=> [build 5/7] COPY . . 0.1s
=> [build 6/7] WORKDIR /src/. 0.1s
=> [build 7/7] RUN dotnet build "MyDockerAppWeb.csproj" -c Release -o /app/build 3.4s
=> [publish 1/1] RUN dotnet publish "MyDockerAppWeb.csproj" -c Release -o /app/publish 2.4s
=> CACHED [base 2/2] WORKDIR /app 0.0s
=> CACHED [final 1/2] WORKDIR /app 0.0s
=> [final 2/2] COPY --from=publish /app/publish . 0.2s
=> exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:a3cb4b6bbeb2149f743509df4583476ac9a7f4c9899dad0b8ff9fd4100413d03 0.0s
=> => naming to docker.io/hager/mynet5api:v20201115 0.0s
PS E:\netcore-workspace\source\repos\MyDockerAppWeb> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hager/mynet5api v20201115 a3cb4b6bbeb2 Less than a second ago 210MB
hager/mynet5api latest 8ab6c8205655 7 hours ago 210MB
mydockerappweb dev 816e4dc9779c 9 hours ago 205MB
mcr.microsoft.com/dotnet/aspnet 5.0-buster-slim c535cc5fb113 4 days ago 205MB

PS E:\netcore-workspace\source\repos\MyDockerAppWeb> docker run -d -p 8080:80 hager/mynet5api:v20201115 .
a25ae3e3cde076cf254cd4492d28ef15516a5b2cc7bc8382ea3213f664e47355
PS E:\netcore-workspace\source\repos\MyDockerAppWeb>

运行项目验证

通过访问http://localhost:8080/Home/getList,就可以正常访问 docker 中部署的项目了。

其他资料

查看生成镜像

docker images 就会看到刚才生成的镜像信息了。

运行镜像

语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTIONS 说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器 ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • --name="nginx-lb": 为容器指定一个名称;
  • --dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致;
  • --dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致;
  • -h "mars": 指定容器的 hostname;
  • -e username="ritchie": 设置环境变量;
  • --env-file=[]: 从指定文件读入环境变量;
  • --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定 CPU 运行;
  • -m :设置容器使用内存最大值;
  • --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • --link=[]: 添加链接到另一个容器;
  • --expose=[]: 开放一个端口或一组端口;
  • --volume , -v: 绑定一个卷

实例

  • 使用 docker 镜像 nginx:latest 以后台模式启动一个容器,并将容器命名为 mynginx。

    • docker run --name mynginx -d nginx:latest
  • 使用镜像 nginx:latest 以后台模式启动一个容器,并将容器的 80 端口映射到主机随机端口。

    • docker run -P -d nginx:latest
  • 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

    • docker run -p 80:80 -v /data:/data -d nginx:latest
  • 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

    • $ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
  • 使用镜像 nginx:latest 以交互模式启动一个容器,在容器内执行/bin/bash 命令。

    • runoob@runoob:~$ docker run -it nginx:latest /bin/bash root@b8573233d675:/#

资料

  • https://www.runoob.com/docker/docker-run-command.html
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值