Loading

使用 Docker 部署和迁移 .NET 应用到 Linux 服务器

最近在使用 Docker 部署 .NET 应用,记录下具体操作过程。此前已经在本机(Windows)和服务器(Linux)中安装好 Docker。

使用 Docker 部署

准备工作

为了方便后续项目更新,做以下准备工作:

  1. 准备 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
    
  2. 在 Visual Studio 中设置其文件属性,将「复制到输出目录」属性设置为「始终复制」,并发布到文件夹。

构建 Docker 镜像

  1. 通过命令行工具进入到项目发布的文件夹目录:

    cd /path/to/
    
  2. 执行 docker build 命令构建 Docker 镜像:

    docker build -t image_name:tag .
    

    例如:

    docker build -t xxx-api:latest .
    
  3. 查看已加载的镜像:

    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 镜像

  1. 查看已有的 Docker 镜像:

    docker images
    

    这将列出所有已有的镜像,找到想要迁移的镜像的名称和标签。

  2. 导出镜像为 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. 导入目标服务器

  1. 加载镜像到 Docker:
    在目标服务器上,使用 docker load 命令加载 tar 文件:

    docker load -i /path/on/remote/server/image.tar
    

    例如:

    docker load -i /home/user/xxx-api.tar
    
  2. 执行 docker images 查看已加载的镜像,确保镜像已经正确加载。

  3. 执行 docker run 命令运行应用,例如:

    docker run -d -p 8084:8084 --name xxx-api-container xxx-api:latest
    

参考资料

posted @ 2025-03-26 11:02  viazure  阅读(220)  评论(0)    收藏  举报