将 .net core 程序部署到 docker
发布项目
- 在 VS 里面选择你需要发布的程序右击添加 docke 支持,选择要发布的OS目标是 Linux 。然后会生成一个 Dockerfile 文件
- 编辑 Dockerfile 文件注释掉一部分,然后添加
COPY . .
,这边注意俩个.
之间有个空格,最终需要保留的如下:
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
# 将当前 Dockerfile 所在目录下的所有文件复制到容器中的当前工作目录。
COPY . . # 注意这边俩个点之前有个空格,注意这边俩个点之前有个空格第一个 . 表示 Dockerfile 所在目录,第二个 . 表示容器中的当前工作目录,因此该命令会将当前目录下的所有文件复制到容器的当前工作目录。
ENTRYPOINT ["dotnet", "WebApi.dll"]
- 右击发布项目到文件夹,或者在需要发布项目文件夹下面打开
PowerShell
或者CMD
运行dotnet publish
命令,默认发布到你程序文件夹下的\bin\Debug\net6.0\publish
文件夹
构建镜像
在\bin\Debug\net6.0\publish
文件夹或发布好的程序文件夹下打开 PowerShell
运行一下命令进行构建镜像
# 1. 如果文件夹下有 dockerfile 文件:
docker build -t 127.0.0.1:5000/<name>:<tag> .
# 2. 如果文件夹下没有 dockerfile 文件,运行需要指定 dockerfile 文件
docker build -t 127.0.0.1:5000/<name>:<tag> -f <path> .
# 127.0.0.1:5000/ 指定 Docker Registry 的地址(私有仓库地址是什么就改什么)
# <name> 代表镜像名
# <tag> 代表版本标签
# <path> 代表指定的 dockerfile 文件如:D:\WMS\Dockerfile
注意:上面命令的 .
不能遗漏,.
表示当前目录,用于指定要运行的 Docker 镜像所在的目录。
-t
: 镜像的名字及标签;-f
:指定要使用的 Dockerfile 路径;
docker build
详细参数查看:官方文档 - docker build 命令
运行容器
构建完镜像运行
docker run -d -p <ip>:<port>:<dockerfilePort> --name=<containerName> --restart=always <name>:<tag>
# <ip> 如果没有指定 ip 默认 localhost
# <prot> 主机端口
# <containerPort> 容器端口
# <containerName> 给容器命名
# <name> 镜像名
# <tag> 版本标签
-
-i
:以交互模式运行容器,通常与 -t 同时使用; -
-t
:为容器重新分配一个伪输入终端,通常与 -i 同时使用; -
-d
:后台运行容器,并返回容器ID; -
-p
:随机端口映射,容器内部端口随机映射到主机的端口; -
--name
:为容器指定一个名称 -
--restart
:指定容器在退出后的重启策略。(有以下选项)no
:默认策略,容器退出时不重启容器;on-failure
:在容器非正常退出时(退出状态非0)才重新启动容器;on-failure:3
:在容器非正常退出时重启容器,最多重启3次;always
:无论退出状态是如何,都重启容器;unless-stopped
:在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。
docker run
详细参数查看:官方文档 - docker run 命令
如果要修改已有容器请用 docker update
命令。如:
docker update --restart=always 容器ID(或者容器名)
docker update
详细参数选项请看:官方文档 - docker update 命令