前言
���云端部署新体验,C# Web API 遇上 Git Docker,828 B2B 企业节特惠来袭!Flexus X 实例,为您的 C#应用提供强大支撑,结合 Git 版本控制与 Docker 容器化部署,实现代码高效管理与无缝迁移。即刻行动,让您的 Web 服务更加稳定、高效,领跑数字化转型之路!
���本实验深入演示了如何在 Ubuntu 环境中,利用 Git 进行版本控制管理代码,并通过 Docker 技术自定义构建镜像,从而实现项目从代码到应用的快速构建、打包与部署流程。这一流程不仅提升了开发效率,还确保了环境的一致性与可重复性。
环境准备
购买服务器配置
本次实验使用的是 Flexus 云服务器 X 实例 服务器。
在性能设置中我选择了自定义模式,使用了 4vCPUs | 12GiB,镜像我选用的是最高版本的 ubuntu
打开 xshell,使用购买的服务器的公网 IP 地址,和设置的密码,连接上我们的服务器。
项目部署
项目准备(Dockerfile 文件)
我这里以 c#为例,新建一个 .net8.0 的 Web API 项目
这个新建的官网的 webApi 项目自带一个接口 weatherforecast 接口,可以获取到最近的天气,因为本篇主要目的是如何使用 git+docker 在服务器上发布,因此不做太多改动。本地启动一下,成功访问到,我们稍后将这个程序部署到服务器上。
因为我们后面采用 Git 方式来发布应用,因此在 gitee 上新建仓库,将代码上传上去。
在项目路径下新建一个 Dockerfile 文件,内容如下(根据自己的解决方案名称、构建环境,如.net 6.0、7.0 等版本,亦或是其他语言,对以下代码就行调整,本部署方式适用于其他编程语言或其他版本的.net)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS baseUSER $APP_UIDWORKDIR /appEXPOSE 8080FROM mcr.microsoft.com/dotnet/sdk:8.0 AS buildARG BUILD_CONFIGURATION=ReleaseWORKDIR /srcCOPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]RUN dotnet restore "WebApplication1/WebApplication1.csproj"COPY . .WORKDIR "/src/WebApplication1"RUN dotnet build "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/buildFROM build AS publishARG BUILD_CONFIGURATION=ReleaseRUN dotnet publish "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=falseFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "WebApplication1.dll"]
这段 Dockerfile 用于构建一个 ASP.NET Core 应用程序的 Docker 镜像
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base:从 Microsoft Container Registry (MCR) 拉取 ASP.NET Core 8.0 的官方运行时镜像作为基础镜像,并将其标记为 base。这个镜像包含了运行 ASP.NET Core 应用程序所需的一切,但不包含构建工具。
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build:从 Microsoft Container Registry 拉取 ASP.NET Core 8.0 的官方 SDK 镜像,用于构建应用程序。这个镜像包含了构建.NET 应用程序所需的一切工具。
通过这种方式,Dockerfile 利用了 Docker 的多阶段构建特性,确保了构建过程中只包含必要的工具(在构建阶段使用 SDK,在最终镜像中仅包含运行时),从而减小了最终镜像的大小。
Git 部署并拉取代码
安装 Git
打开终端,然后输入以下命令来安装 Git
sudo apt update sudo apt install git
配置 Git 用户信息
在安装 Git 后,建议配置你的用户名和电子邮件地址。这些信息将用于你的 Git 提交,并帮助你识别代码更改的源头。
git config --global user.name "你的名字" git config --global user.email "你的邮箱地址"
SSH 密钥
虽然你可以通过 HTTPS URL 克隆仓库,但使用 SSH 密钥可以更安全地访问你的仓库。
检查是否已存在 SSH 密钥:
ls -al ~/.ssh
如果控制台输入结果像我一样
.ssh文件夹是存在的,没有看到 id_rsa和 id_rsa.pub文件,说明没有包含任何 SSH 密钥。那么你需要生成一个新的 SSH 密钥对。
chmod 700 /root/.ssh//更改 /root/.ssh 目录的权限,700 意味着只有目录的所有者 ssh-keygen -t rsa -b 4096 -C "你的邮箱地址"
命令执行后,它会询问你“Enter file in which to save the key (/root/.ssh/id_rsa):”,这是在询问你希望将生成的私钥保存在哪个文件中。默认情况下,它会建议你保存在/root/.ssh/id_rsa
直接按回车键,它会接受默认的文件名/root/.ssh/id_rsa来保存私钥
接下来,会要求你输入一个密码(passphrase)来保护私钥。这是一个可选步骤,如果你不想设置密码,只需再次按回车键即可跳过此步骤
再次输入 ls -al ~/.ssh,可以看到.ssh 目录下已经生成 id_rsa.pub 等文件了。
输入以下命令,公钥内容将被输出到终端,然后我们复制这些内容。
cat /root/.ssh/id_rsa.pub
这里以 gitee 为例,我们将公钥添加到安全设置的 SSH 公钥中。
添加完成后我们就可以在控制台执行命令将我们的项目代码克隆下来了。
安装 docker
Docker 在 Ubuntu 上依赖一些软件包,需要先行安装。
sudo apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
添加 Docker GPG 密钥
这是为了验证从 Docker 仓库下载的软件包的完整性。
#官方 GPG key (可能国内访问会存在问题)curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg# 阿里源(推荐使用)curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加 Docker 官方软件源
接下来,需要将 Docker 的官方软件源添加到你的 Ubuntu 系统中。运行以下命令(根据你的 Ubuntu 版本,$(lsb_release -cs)会自动替换为你的 Ubuntu 代号,如 focal、jammy 等):
#Docker 官方源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null#阿里 apt 源 echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
再次更新软件包列表
添加完软件源后,再次运行更新命令以确保你的软件包列表是最新的:
sudo apt updatesudo apt-get update
安装 docker
#安装最新版本的 Dockersudo apt install docker-ce docker-ce-cli containerd.io#查看 Docker 版本 docker version#查看所有容器 docker ps -a
项目运行
构建镜像
cd 到我们使用 git 拉下来的项目,如下,包含 Dockerfile 的目录下
执行命令构建一个新的 Docker 镜像
docker build -t auth .
构建成功后执行 docker images 查看镜像,如下我名称为 auth 的镜像已经构建完成。
运行容器
docker run -d -p 8080:8080 --restart=always --name auth auth
-d: 这个标志表示以“分离模式”运行容器,也就是说,容器会在后台运行。你不会直接看到容器的输出,除非你使用 docker logs命令或其他方法来查看。
-p 8080:8080: 这个参数用于端口映射。它将容器内的 8080 端口映射到宿主机的 8080 端口上。这样,任何发送到宿主机 8080 端口的请求都会被转发到容器的 8080 端口上。
--restart=always: 这个参数指定了容器的重启策略。always表示无论何时容器停止运行(无论是因为退出还是 Docker 守护进程重启),Docker 都会自动重启这个容器。
运行完成后可以执行 docker ps 查看容器:
新增安全组
打开服务器控制台,找到我们当前的服务器,点击名称。
进去到详情后,切换到安全组页面,点击配置规则。
在入方向规则下,点击添加规则,然后加入我们项目的端口号。
访问接口
查看我们的服务器的 ip 地址
打开浏览器,访问我们项目的接口,成功获取到信息。
更新发布
接下来我们将接口调整一下,改为返回一个 hello word!
提交代码
回到服务器控制台,执行 git pull 拉取最新代码
使用更新后的代码重新构建 Docker 镜像。运行与之前相同的 docker build 命令
docker build -t auth .
停止并删除旧的容器。
docker stop auth docker rm auth
使用更新后的镜像启动一个新容器。
docker run -d -p 8080:8080 --restart=always --name auth auth
刷新一下我们的浏览器,页面中返回的信息是 hello word!
审核编辑 黄宇
-
Git
+关注
关注
0文章
199浏览量
15756 -
云服务器
+关注
关注
0文章
592浏览量
13362
发布评论请先 登录
相关推荐
评论