828华为云征文|Flexus X实例C#/.Net Core 结合(git代码管理、docker自定义镜像)快速发布部署-让你的项目飞起来~

news2024/9/20 20:37:55

目录

前言

环境准备

购买服务器配置

项目部署

项目准备(Dockerfile文件)

Git部署并拉取代码

安装Git

配置Git用户信息

SSH密钥

安装docker

添加Docker GPG密钥

添加Docker官方软件源

再次更新软件包列表

安装docker

项目运行

构建镜像

运行容器

新增安全组

访问接口

更新发布


前言

🚀 云端部署新体验,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 base
USER $APP_UID
WORKDIR /app
EXPOSE 8080

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "WebApplication1.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --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_rsaid_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代号,如focaljammy等):

#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 update
sudo apt-get update

安装docker

#安装最新版本的Docker
sudo 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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2115946.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL 的基础 一 (连接池, SQL接口, 查询解析器, 查询优化器, 存储引擎接口, 执行器)

目录 1 MySQL数据库的连接池 2 网络连接必须让线程来处理 3 SQL接口:负责处理接收到的SQL语句 4 查询解析器:让MySQL能看懂SQL语句 5 查询优化器:选择最优的查询路径 6 调用存储引擎接口,真正执行SQL语句 7 执行器&…

UE4_后期处理_后期处理材质及后期处理体积三—遮挡物体描边显示

一、效果: 在很多游戏中为了玩家能看到墙面背后是否有敌人,会给被遮挡的敌人增加描边显示,效果如下: 参考: https://zhuanlan.zhihu.com/p/81310476 https://zhuanlan.zhihu.com/p/358140547 二、所需知识 知识点…

数据结构与算法学习day20-二叉树的最大深度、最小深度、完全二叉树的节点个数、平衡二叉树、二叉树所有路径

一、二叉树的最大深度 1.题目 104. 二叉树的最大深度 - 力扣(LeetCode) 2.思路 2.1递归法 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度…

安卓玩机工具------vivo机型线刷救砖固件 下载工具操作步骤预览

vivo机型玩机 vivo机型虽然对于玩家来说相对可玩性较低。官方封闭bl锁。对于普通玩家来说只能 中规中矩使用机型。但目前有很多vivo机型通过第三方渠道已经可以解bl锁和root操作。但有时候玩机会遇到误操作或者其他系统性问题导致系统瘫痪不开机。 那么我们就需要具备一些救砖…

Linux网络——Socket编程函数

一.网络命令 1.ping ping命令用来检测网络是否连通,具体用法为: ping 任意网址 结果如下: 当出现上述字段时,证明网络是连通的,这里值得注意的是,ping命令执行之后会不断进行网络检测,不会停…

Linux——网络基础Socket编程

目录 一计算机网络背景 二协议 1初始协议 1.1协议分层 1.2OSI七层模型 1.3TCP/IP五层模型 2再始协议 2.1为什么要有TCP/IP协议 2.2TCP/IP与OS的关系 2.3所以什么是协议 三网络传输基本流程 1局域网(以太网)通信原理 1.1认识mac地址 2同…

【软件设计师真题】下午题第一大题---数据流图设计

解答数据流图的题目关键在于细心。 考试时一定要仔细阅读题目说明和给出的流程图。另外,解题时要懂得将说明和流程图进行对照,将父图和子图进行对照,切忌按照常识来猜测。同时应按照一定顺序考虑问题,以防遗漏,比如可以…

综合案例-数据可视化-地图

一、pyecharts—地图快速入门 假设我们要将6个地区的某种数量在地图上标注出来,首先导入pyecharts包内地图相关模块,然后准备地图数据(数据类型是列表,列表的元素类型为元组),然后把准备好的数据添加进地图…

Java笔试面试题AI答之单元测试JUnit(1)

文章目录 1. 什么是JUnit?2. JUnit的重要特征是什么?3. 什么是单元测试案例?单元测试的特点:单元测试的好处:编写单元测试案例的步骤: 4. 何时在开发周期中编写单元测试?5. 为什么不直接使用Sys…

【鸿蒙开发从0到1 day07】

ArkTS-基础语法 一.开发环境1.下载Dev Eco Stdio2.下载chinese插件3.基础入门4.输出语句5.注释 二.3种常见的数据类型1.数据类型2.储存数据(1)变量:专门用来存储数据的容器(可变)(2)常量(3)命名规则 三.数组四.函数1.无参函数2.有参函数3.返回值4.箭头函数 五.对象六.总结 一.开…

HBuilderx中vue页面引用scss样式

scss为css样式的预编译器,引入了变量、嵌入、混合、集成、引入等功能,相对于css样式,实现了样式的编程,具有更灵活的样式编写模式。 那么在HBuilderx中,“.vue”格式页面如何调用scss样式呢?详细如下&#…

每日一练7:简写单词(含链接)

1.链接 简写单词_牛客题霸_牛客网 2.题目 3.代码1&#xff08;错误经验&#xff09; #include <iostream> #include <string> using namespace std;int main() {string s;string ret;int count 0;while(cin >> s)for(auto a : s){if(count 0){if( a <…

字符串操作的高效工具—正则表达式

字符串操作的高效工具—正则表达式 一 . 概述1.1 认识正则表达式1.2 正则表达式体验案例 二 . 使用2.1 字符类2.2 逻辑运算符2.3 预定义字符2.4 数量词2.5 分组括号2.6 字符串中常用含有正则表达式的方法 正则表达式&#xff08;Regular Expression&#xff0c;简称 regex 或 r…

xcode打包报错之 zip fail / copy fail

在xcode中archive打包中&#xff0c;遇到提示zip fail或者copy fail&#xff0c;此时请清理你电脑的缓存文件了&#xff0c;但凡遇到这两种报错&#xff0c;是编译时运行内存不够导致的&#xff0c;请及时查看并清理你的电脑。 如下&#xff1a; 将对应的缓存或者垃圾清理&am…

春日美食汇:基于SpringBoot的订餐平台

2 系统关键技术 2.1JSP技术 JSP(Java脚本页面)是Sun和许多参与建立的公司所提倡的动态web技术。将Java程序添加到传统的web页面HTML文件()。htm,。Html) [1]。 JSP这种能够独立使用的编程语言可以嵌入在html语言里面运行&#xff0c;正因为JSP参照了许多编程语言的特性&#xf…

C++——类与对象(二)

目录 引言 类的默认成员函数 构造函数 1.构造函数的概念 2.注意事项 初始化列表 1.初始化列表的概念 2.注意事项 析构函数 1.析构函数的概念 2.注意事项 拷贝构造函数 1.拷贝构造函数的概念 2.注意事项 运算符重载 1.运算符重载的概念 2.注意事项 赋值运算符…

食家巷桃酥:一口酥脆,回味悠长

在众多的传统糕点中&#xff0c;食家巷桃酥以其独特的魅力脱颖而出&#xff0c;成为了许多人心中的美味记忆。初见食家巷桃酥&#xff0c;那金黄的色泽便让人食欲大增。每一块桃酥都像是一件小小的艺术品&#xff0c;散发着诱人的香气。它的外形饱满&#xff0c;边缘微微隆起&a…

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation &#xff1a; 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

安卓下载工具箱_3.8.1/去浏览器跳转登录就是会员

下载工具箱app是一款支持56种下载协议的安卓万能下载工具,下载工具箱最新版主要提供网络视频解析下载,资源嗅探下载,以及本地视频扫描提取功能,同时提供不常见的视频编辑功能,例如:智能清洗,高帧率/码率等 链接: https://pan.baidu.com/s/1pW0CgmGv9bmzGkBA4rV2oQ?pwdxdby …

群晖NAS安装alist

官方文档&#xff1a;https://alist.nn.ci/zh NAS参考&#xff1a;https://post.smzdm.com/p/an9zpvev/ Windows安装&#xff1a;alist-windows-amd64.zip 手机参考&#xff1a;https://studylessshape.github.io/post/note/alist-install-for-android/ 质感文件可以不用安&…