Skip to content
.NET 开发者指北.NET 开发者指北
CMS
.NET指北
FreeKit
Docker
关于
博客
github icon
    • Docker
      • Docker 命令行
        • Docker 配置 Baget
          • Docker 配置 Jenkins
            • Docker 配置 MySql
              • Docker 配置 Nacos
                • Docker 配置 Portainer
                  • Docker 配置 Redis
                    • Docker配置 Nginx
                      • Docker配置 RabbitMQ
                        • Docker部署CMS命令
                          • ASP.NET Core+Docker+AliYun 部署
                            • ASP.NET Core+Docker 部署
                              • 部署分为几种方式
                                • 方式1.本地生成部署包+服务器Docker 部署
                                  • Docker打包
                                  • 方式二.Docker 打包并部署
                                    • 创建Dockerfile时
                                      • 上传至阿里云
                                        • 启动服务
                                          • 登录阿里容器镜像
                                            • 判断是否存在容器(镜像),如果存在则删除
                                              • 拉取镜像
                                                • 方式1.直接启动
                                                  • 方式2.使用映射目录启动
                                                  • 源码
                                                    • 参考

                                                  ASP.NET Core+Docker+AliYun 部署

                                                  calendar icon2023年3月13日timer icon大约 3 分钟word icon约 992 字

                                                  此页内容
                                                  • ASP.NET Core+Docker 部署
                                                  • 部署分为几种方式
                                                  • 方式1.本地生成部署包+服务器Docker 部署
                                                    • Docker打包
                                                  • 方式二.Docker 打包并部署
                                                    • 创建Dockerfile时
                                                    • 上传至阿里云
                                                    • 启动服务
                                                    • 登录阿里容器镜像
                                                    • 判断是否存在容器(镜像),如果存在则删除
                                                    • 拉取镜像
                                                    • 方式1.直接启动
                                                    • 方式2.使用映射目录启动
                                                  • 源码
                                                  • 参考

                                                  # ASP.NET Core+Docker+AliYun 部署

                                                  # ASP.NET Core+Docker 部署

                                                  • ubuntu 安装了docker
                                                  • 本地.net sdk
                                                  • 工具:xshell、xftp
                                                  • 开通阿里的容器镜像服务 (aliyun.com)open in new window:用于私有镜像上传

                                                  # 部署分为几种方式

                                                  • 本地生成aspnetcore的发布包,在服务器上生成docker镜像,直接在服务器运行
                                                  • 本地构建Docker镜像,推送Aliyun容器镜像,服务器拉取镜像并运行
                                                  • Jenkins、Aliyun容器镜像、自动化脚本(跨服务器)

                                                  # 方式1.本地生成部署包+服务器Docker 部署

                                                  1.本地如果没有安装Docker for Windows,可在服务器,如ubuntu安装了Docker

                                                  Install Docker Engine on Ubuntu | Docker Documentationopen in new window

                                                  本地创建一个ASP.NET Core项目DevOps.Api,项目源码已上传至github

                                                  luoyunchong/devops: Azure DevOps Pipelines Release Aliyun 阿里云 Docker CI/CD 持续集成 (github.com)open in new window

                                                  创建配置Dockerfile文件,替换如下内容,右键属性配置,复制到输出目录:如果较新则复制

                                                  FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
                                                  COPY . /app
                                                  WORKDIR /app
                                                  EXPOSE 80
                                                  ENTRYPOINT ["dotnet", "DevOps.Api.dll"]
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5

                                                  生成.NET项目包

                                                  cd e:/code/devops/DevOps.Api
                                                  dotnet publish --configuration Release
                                                  
                                                  1
                                                  2

                                                  将在此目录生成部署的文件

                                                  e:/code/devops/DevOps.Api/bin/Release/net7.0/publish
                                                  
                                                  1

                                                  在ubuntu创建一个目录 devops_api,将生成文件内容,使用xftp上传至ubuntu文件夹中

                                                  mkdir /var/www/devops_api -p
                                                  cd /var/www/devops_api
                                                  
                                                  1
                                                  2

                                                  devops_api_deploy.png

                                                  # Docker打包

                                                  ubuntu上安装好了docker,并且正常运行。

                                                  cd /var/www/devops_api # 先cd的项目目录 
                                                  docker build -t igeekfan/devops_api .     #生成images
                                                  docker run -d -p 7007:80 igeekfan/devops_api   # 生成 container 并运行在5000端口
                                                  
                                                  1
                                                  2
                                                  3
                                                  • d 代表后台运行
                                                  • p 此时将对外显露7007端口运行,7007是运行后,docker对外的端口,80是这个服务对外的端口,其中Dockerfile 存在语句EXPOSE 80

                                                  此时打开 浏览器, ip+端口7007即可访问服务。

                                                  http://127.0.0.1:7007/swagger/index.htmlopen in new window

                                                  # 方式二.Docker 打包并部署

                                                  • 此方法必须在本地安装docker

                                                  # 创建Dockerfile时

                                                  直接使用默认创建的文件内容即可,不需要修改任何内容

                                                  #See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
                                                  
                                                  FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
                                                  WORKDIR /app
                                                  EXPOSE 80
                                                  EXPOSE 443
                                                  
                                                  FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build
                                                  WORKDIR /src
                                                  COPY ["DevOps.Api/DevOps.Api.csproj", "DevOps.Api/"]
                                                  RUN dotnet restore "DevOps.Api/DevOps.Api.csproj"
                                                  COPY . .
                                                  WORKDIR "/src/DevOps.Api"
                                                  RUN dotnet build "DevOps.Api.csproj" -c Release -o /app/build
                                                  
                                                  FROM build AS publish
                                                  RUN dotnet publish "DevOps.Api.csproj" -c Release -o /app/publish /p:UseAppHost=false
                                                  
                                                  FROM base AS final
                                                  WORKDIR /app
                                                  COPY --from=publish /app/publish .
                                                  ENTRYPOINT ["dotnet", "DevOps.Api.dll"]
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5
                                                  6
                                                  7
                                                  8
                                                  9
                                                  10
                                                  11
                                                  12
                                                  13
                                                  14
                                                  15
                                                  16
                                                  17
                                                  18
                                                  19
                                                  20
                                                  21
                                                  22

                                                  # 上传至阿里云

                                                  先登录

                                                  #登录
                                                  sudo docker login --username=[账号] registry.cn-hangzhou.aliyuncs.com
                                                  #密码
                                                  #输入密码 xxxxx
                                                  
                                                  #或使用此命令
                                                  
                                                  echo [密码]| sudo docker login --username=[账号] registry.cn-hangzhou.aliyuncs.com --password-stdin
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5
                                                  6
                                                  7
                                                  8

                                                  打包并推到阿里云镜像

                                                  #进入项目根目录
                                                  cd e:/code/devops
                                                  #build 镜像
                                                  docker build -f DevOps.Api/Dockerfile  -t devops_api .
                                                  #打包tag
                                                  docker tag devops_api registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api
                                                  #推送阿里云
                                                  docker push registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5
                                                  6
                                                  7
                                                  8

                                                  # 启动服务

                                                  (服务器上必须安装docker、在linux服务器上执行)

                                                  # 登录阿里容器镜像

                                                  echo [密码]| sudo docker login --username=[账号] registry.cn-hangzhou.aliyuncs.com --password-stdin
                                                  
                                                  1

                                                  # 判断是否存在容器(镜像),如果存在则删除

                                                  #判断是否存在-devops_api容器
                                                  docker ps | grep devops_api &> /dev/null
                                                  #如果不存在,则Remove
                                                  if [ $? -ne 0 ]
                                                  then
                                                      echo "devops_api container not exist continue.. "
                                                  else
                                                      echo "remove devops_api container"
                                                      docker rm devops_api -f
                                                  fi
                                                  
                                                  docker images | grep registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api &> /dev/null
                                                  #如果不存在,不做操作
                                                  if [ $? -ne 0 ]
                                                  then
                                                      echo "image does not exist , continue..."
                                                  else
                                                      echo "image exists !!! remove it"
                                                      docker rmi --force registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api
                                                  fi
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5
                                                  6
                                                  7
                                                  8
                                                  9
                                                  10
                                                  11
                                                  12
                                                  13
                                                  14
                                                  15
                                                  16
                                                  17
                                                  18
                                                  19
                                                  20

                                                  # 拉取镜像

                                                  docker pull registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api:latest
                                                  
                                                  1

                                                  # 方式1.直接启动

                                                  docker run --restart unless-stopped -p 5015:80  --privileged=true --name 
                                                  devops_api -d registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api
                                                  
                                                  1
                                                  2

                                                  # 方式2.使用映射目录启动

                                                  mkdir -p /var/www/devops_api/wwwroot
                                                  docker run --restart unless-stopped -p 5014:80 \
                                                  -v /var/www/devops_api/wwwroot:/app/wwwroot:rw \
                                                  -v /var/www/devops_api/appsettings.json:/app/appsettings.json \
                                                  --privileged=true \
                                                  --name devops_api \
                                                  -d registry.cn-hangzhou.aliyuncs.com/igeekfan/devops_api
                                                  
                                                  1
                                                  2
                                                  3
                                                  4
                                                  5
                                                  6
                                                  7

                                                  # 源码

                                                  luoyunchong/devops: Azure DevOps Pipelines Release Aliyun 阿里云 Docker CI/CD 持续集成 (github.com)open in new window

                                                  # 参考

                                                  ASP.NET Core开发Docker部署open in new window

                                                  edit icon在 GitHub 上编辑此页open in new window
                                                  上次编辑于: 2023/3/13 06:20:58
                                                  贡献者: igeekfan
                                                  上一页
                                                  Docker部署CMS命令
                                                  MIT Licensed | Copyright © 2021-present luoyunchong
                                                  苏ICP备16046457号-1

                                                  该应用可以安装在你的 PC 或移动设备上。这将使该 Web 应用程序外观和行为与其他应用程序相同。它将在出现在应用程序列表中,并可以固定到主屏幕,开始菜单或任务栏。此 Web 应用程序还将能够与其他应用程序和你的操作系统安全地进行交互。

                                                  详情