先决条件
安装 .NET SDK 6.0
安装 Docker 社区版
一、安装 WSL2
# 此命令将启用所需的可选组件
> wsl --install
# 将 WSL 2 设置为默认版本
> wsl --set-default-version 2
# 安装 Ubuntu-20.04
> wsl --install -d Ubuntu-20.04
二、创建 .NET 应用
使用命令行创建项目
> dotnet new console -o App -n DotNet.Docker
Program.cs 应如下面的 C# 代码所示 :
Console.WriteLine("Hello World!");
将此文件替换为以下每秒计数一次的代码:
var counter = 0;
var max = args.Length != 0 ? Convert.ToInt32(args[0]) : -1;
while (max == -1 || counter < max)
{
Console.WriteLine($"Counter: {++counter}");
await Task.Delay(1000);
}
使用命令行 dotnet run
或 dotnet run -- 5
启动测试程序。
三、创建 Dockerfile
创建 Dockerfile 并写入代码:
FROM mcr.microsoft.com/dotnet/aspnet:6.0
COPY bin/Release/net6.0/publish/ App/
WORKDIR /App
ENV DOTNET_EnableDiagnostics=0
ENTRYPOINT ["dotnet", "DotNet.Docker.dll"]
FROM
定制的镜像都是基于 FROM 的镜像
COPY
命令指示 Docker 将计算机上的指定文件夹复制到容器中的文件夹
WORKDIR
命令将容器内的当前目录更改为 App
ENV
设置容器环境变量
ENTRYPOINT
指示 Docker 将容器配置为可执行文件运行,在容器启动时,ENTRYPOINT 命令运行。
四、创建容器
首先创建对应的镜像
# 创建镜像,用 -t 设置镜像的名字
> docker build -t counter-image -f Dockerfile .
# 列出本地主机上的镜像
> docker images
然后创建容器
# 创建一个新的容器但不启动它
> docker create --name core-counter counter-image
# 查看已创建容器
> docker ps -a
五、管理容器
容器是使用特定名称 core-counter 创建的,此名称用于管理容器。
# 启动容器
> docker start core-counter
# 仅仅查看正在运行的容器
> docker ps
# 连接到正在运行中的容器 --sig-proxy=false 参数可确保 CTRL-D 或 CTRL-C 不会关闭容器
> docker attach --sig-proxy=false core-counter
# 停止容器
> docker stop core-counter
# 查看已创建容器
> docker ps -a
# 删除容器
> docker rm core-counter
# 再次查看是否成功删除
> docker ps -a
如果只是需要单次运行,则只需使用 docker run
无需依次运行 docker create
和 docker start
。
# 自动使用当前终端连接到容器,再在容器完成时删除容器
> docker run -it --rm counter-image
# 给程序传参 3
> docker run -it --rm counter-image 3
# 查看容器停止后是否自动删除了
> docker ps -a