使 .NET Core 应用程序容器化笔记


先创建一个.Net Core应用,用来放到Docker容器中运行。

1.创建 .Net Core 应用,项目名:"App"
dotnet new console -o App -n NetCore.Docker

2.启动应用:
dotnet run

3.调用Visual Studio Code 中打开包含该项目的“App”文件夹
code .

4.停止正在运行的应用:
Ctrl+C

5.启动应用,并传递参数
dotnet run -- 5

6.发布 .Net Core 应用,“发布”文件夹的路径应为 .AppinRelease et5.0publish
dotnet publish -c Release


创建映像,创建容器。

1.创建 Dockerfile 文件, 无后缀名,内容:
FROM mcr.microsoft.com/dotnet/runtime:5.0
COPY bin/Release/net5.0/publish/ App/
WORKDIR /App
ENV COMPlus_EnableDiagnostics=0
ENTRYPOINT ["dotnet", "NetCore.Docker.dll"]

FROM 指定可公开访问的容器映像名称。
COPY 命令将“publish”文件夹被复制到容器中的“App”文件夹 。
WORKDIR 命令将容器内的当前目录更改为“App” 。
ENV COMPlus_EnableDiagnostics=0 表示容器将以只读方式运行。
ENTRYPOINT 指示 Docker 将容器配置为可执行文件运行。 在容器启动时,ENTRYPOINT 命令运行。 当此命令结束时,容器也会自动停止。

运行命令:
docker build -t counter-image -f Dockerfile .
counter-image是创建的映像名称,命令中的 . 指示 Docker 在当前文件夹中查找 Dockerfile 。

2.列出已安装的映像:
docker images

3.删除映像。
依次删除 Dockerfile 创建的映像,以及 Dockerfile 所依据的 .NET Core 映像。 可以使用 IMAGE ID 或 REPOSITORY:TAG 格式字符串。
docker rmi counter-image:latest
docker rmi mcr.microsoft.com/dotnet/aspnet:5.0

4.创建容器:
docker create --name core-counter counter-image
core-counter是容器名称,counter-image是映像名称,
可以这么理解:映像是一个抽象对象,容器是映像的一个具体实例,一个映像可以有N多个具体实例,创建的.Net Core应用就是放在容器里去运行的。

5.查看正在运行的容器:
docker ps

6.查看所有容器:
docker ps -a

7.删除容器:
docker rm core-counter

8.启动容器:
docker start core-counter

9.停止容器:
docker stop core-counter

10.连接到容器:
docker attach --sig-proxy=false core-counter
在容器运行后,可以连接到它来查看输出,Ctrl+C 击键用于从正在运行的容器中分离出来。 除非另行指定,否则此击键将结束容器中的进程,这会停止容器。 --sig-proxy=false 参数可确保 Ctrl+C 不会停止容器中的进程。

11.单次运行:
docker run -it --rm counter-image 3
docker run 相当于docker create+docker start。
使用 docker run -it,Ctrl+C 命令会停止在容器中运行的进程,进而停止容器。
由于提供了 --rm 参数,因此在进程停止时自动删除容器。
3 是传给应用的参数。

原文地址:https://www.cnblogs.com/v-dai/p/14949029.html