使用 Docker 部署和迁移 .NET 应用到 Linux 服务器
最近在使用 Docker 部署 .NET 应用,记录下具体操作过程。此前已经在本机(Windows)和服务器(Linux)中安装好 Docker。
使用 Docker 部署
准备工作
为了方便后续项目更新,做以下准备工作:
-
准备
Dockerfile、.dockerignore文件,并拷贝到网站项目所在目录中。Dockerfile:定义如何构建 Docker 镜像,包含一系列指令来设置基础镜像、配置环境、复制文件、暴露端口和定义启动命令等。.dockerignore:指定在构建过程中应该忽略的文件和目录,帮助减小镜像大小并提高构建效率,同时保护敏感信息。
Dockerfile文件示例:# 使用官方的 .NET 8.0 ASP.NET 运行时作为基础镜像,命名为"base" FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base # 设置时区为亚洲/上海,确保容器内的时间与主机一致 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' >/etc/timezone # 设置工作目录为/app,后续的操作都将在该目录下进行 WORKDIR /app # 将当前目录下的所有文件复制到容器的/app 目录中 COPY . . # 暴露 8084 端口,告诉 Docker 这个容器在运行时会监听这个端口 EXPOSE 8084 # 设置环境变量 ASPNETCORE_URLS,指定应用在容器内部监听的地址和端口 # 这里设置为 http://*:8084,表示监听所有网络接口的 8084 端口 ENV ASPNETCORE_URLS=http://*:8084 # 指定容器启动时运行的命令,这里是运行 xxx.Api.dll 程序 # dotnet 命令用于运行编译后的 .NET 应用程序 ENTRYPOINT ["dotnet", "xxx.Api.dll"].dockerignore文件示例:**/.classpath **/.dockerignore **/.env **/.git **/.gitignore **/.project **/.settings **/.toolstarget **/.vs **/.vscode **/*.*proj.user **/*.dbmdl **/*.jfm **/azds.yaml **/bin **/charts **/docker-compose* **/Dockerfile* **/node_modules **/npm-debug.log **/obj **/secrets.dev.yaml **/values.dev.yaml LICENSE README.md -
在 Visual Studio 中设置其文件属性,将「复制到输出目录」属性设置为「始终复制」,并发布到文件夹。
构建 Docker 镜像
-
通过命令行工具进入到项目发布的文件夹目录:
cd /path/to/ -
执行
docker build命令构建 Docker 镜像:docker build -t image_name:tag .例如:
docker build -t xxx-api:latest . -
查看已加载的镜像:
docker images
启动应用
执行 docker run 命令运行应用,示例:
docker run -d -p host-port:container-port --name container-name image_name:tag
例如,镜像名命名为 xxx-api,运行:
docker run -d -p 8084:8084 --name xxx-api-container xxx-api:latest
验证
- 使用
docker ps -a命令查看容器的运行状态。 - 通过访问 http://localhost:8084 验证应用是否正常运行。
迁移镜像到其他 Linux 服务器
1. 导出 Docker 镜像
-
查看已有的 Docker 镜像:
docker images这将列出所有已有的镜像,找到想要迁移的镜像的名称和标签。
-
导出镜像为 tar 文件:
使用docker save命令将镜像保存为一个 tar 文件:docker save -o /path/to/image.tar image_name:tag例如,镜像名称是
xxx-api,标签是latest:docker save -o D:\xxx-api.tar xxx-api:latest
2. 将 Tar 文件传输到目标服务器
这里使用 scp 命令将 tar 文件传输到另一台服务器:
scp /path/to/image.tar username@remote-server:/path/on/remote/server/
例如:
scp /home/user/xxx-api.tar root@192.168.1.100:/home/
3. 导入目标服务器
-
加载镜像到 Docker:
在目标服务器上,使用docker load命令加载 tar 文件:docker load -i /path/on/remote/server/image.tar例如:
docker load -i /home/user/xxx-api.tar -
执行
docker images查看已加载的镜像,确保镜像已经正确加载。 -
执行
docker run命令运行应用,例如:docker run -d -p 8084:8084 --name xxx-api-container xxx-api:latest

浙公网安备 33010602011771号