.NETCore项目在Windows下构建Docker镜像并本地导出分发到CentOS系统下

news2024/11/18 16:47:16

在Windows下使用Docker,我们选择Docker Desktop这个软件,非常方便。

Docker Desktop介绍及安装

Docker Desktop是适用于Mac、Linux或Windows环境的一键安装应用程序,使您能够构建和共享容器化应用程序和微服务。
它提供了一个简单的GUI(图形用户界面),允许您直接从机器管理容器、应用程序和图像。Docker Desktop既可以单独使用,也可以作为CLI的补充工具。
Docker Desktop减少了在复杂设置上花费的时间,因此您可以专注于编写代码。它负责端口映射、文件系统问题和其他默认设置,并定期更新错误修复和安全更新。
安装Docker Desktop后,默认安装了以下组件:

  • Docker Engine
  • Docker CLI client
  • Docker Buildx
  • Extensions
  • Docker Compose
  • Docker Content Trust
  • Kubernetes
  • Credential Helper

Docker Desktop可与您选择的开发工具和语言配合使用,并使您能够访问Docker Hub中的大量认证图像和模板库。这使开发团队能够扩展他们的环境,以便使用安全的存储库快速自动构建、持续集成和协作。
官网地址

项目编译

发布项目运行框架为.net6.0,运行环境为linux-x64

Dockerfile内容及国内镜像源

Dockerfile是用来构建docker镜像的构建文件,它其实就像一个脚本文件,里面可以执行一些命令,通过它就可以指定或下载构建的镜像所需要的一些组件,然后打包成镜像文件。
下面是本教程使用的Dockerfile脚本文件内容,指定了使用asp.net6.0的运行时环境,并且在镜像系统的5000端口上提供http服务。同时更新sources.list使用国内镜像源,**这里没有用阿里的镜像源,因为测试过程中阿里的镜像源在apt-get install -y libgdiplus的时候会提示找不到这个组件(坑)。**因为使用的有基于System.Drawing绘制的验证码图片,所以需要在构建的时候把libgdiplus组件引用到镜像文件中,最后把镜像系统中的时区改成亚洲的时区。

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /WhiteList
EXPOSE 5000
COPY . .

RUN touch /etc/apt/sources.list
RUN echo "" > /etc/apt/sources.list \ 
   && echo "deb http://mirrors.163.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb http://mirrors.163.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb http://mirrors.163.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb-src http://mirrors.163.com/debian/ buster main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb-src http://mirrors.163.com/debian/ buster-updates main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb-src http://mirrors.163.com/debian/ buster-backports main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" >> /etc/apt/sources.list \ 
   && echo "deb-src http://mirrors.163.com/debian-security/ buster/updates main non-free contrib" >> /etc/apt/sources.list

ENV TZ=Asia/Shanghai
RUN apt-get update -y 
#RUN apt-get upgrade -y
RUN apt-get install -y libgdiplus
RUN apt-get clean
RUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll
RUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone

ENV ASPNETCORE_URLS http://+:5000
ENTRYPOINT ["dotnet", "WhiteList.dll"]

同时可以添加.dockerignore文件来排除一些不需要打包到镜像里的文件,比如忽略到bin或者obj目录里的文件。
[b|B]in [O|o]bj
最后,千万不要忘记把wwwroot复制到发布的目录中,要不然访问的时候会没有样式。以上Dockerfile中的有些脚本命令可合并成一行。

Docker镜像打包发布

把Dockerfile和.dockerignore文件复制到发布目录中,然后运行PowerShell,cd命令到发布目录(本文使用目录为bin\Release\net6.0\linux-x64)。
然后执行打包命令
docker build --tag whitelist:1.0 .

如一切正常,按上图的进度执行完成后,就可以在Docker Desktop中看到打包的镜像文件。

Docker Desktop中的Linux系统

我们点击镜像的运行按钮,填写好镜像名称,绑定端口(本机通过此端口用浏览器可以访问到容器内的服务),绑定的本地文件夹(可选)和其它参数(可选)后点击RUN按钮,如果没有端口冲突和名称冲突,就会得到一个运行成功的容器。


我们可以进入到容器的操作系统中查看一下系统信息。

cat /etc/issue
Debian GNU/Linux 10

cat /proc/version
Linux version 5.15.90.1-microsoft-standard-WSL2 (oe-user@oe-host) (x86_64-msft-linux-gcc (GCC) 9.3.0, GNU ld (GNU Binutils) 2.34.0.20200220)

Docker镜像导出

现在我们已经得到了一个基于Docker Desktop在Windows系统上构建的镜像文件,在使用中,我们需要把这个镜像运行在Linux系统中(比如CentOS),所以需要把镜像导出来进行分发(这里使用的是本地导出,不是导出到云镜像服务器)。
在Windows系统的PowerShell中执行下面命令,把镜像(whitelist):Tag名(1.0)导出到本地的d盘,文件名是whitelist.tar,
docker save -o d:\whitelist.tar whitelist:1.0

CentOS安装Docker

首先安装一下Docker所依赖的组件
yum install -y yum-untils device-mapper-persistent-data lvm2

然后配置数据源为国内的阿里云数据源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装Docker
yum install docker-ce

启动Docker
systemctl start docker

设置Docker为开机自启
systemctl enable docker

查看Docker的版本信息
docker --version
Docker version 24.0.2, build cb74dfc

查看当前Docker中的镜像
docker images

这里看到,目前Docker中没有任何镜像

CentOS Docker镜像导入

把镜像文件上传到/usr/data目录下,然后执行导入镜像的命令
docker load -i /usr/data/whitelist.tar

导入成功后,再查看Docker中的镜像,就会看到我们刚导入的镜像文件了。

随后我们执行运行镜像的命令,把CentOS系统的8080端口和容器的5000端口做映射。
docker run -d -p 8080:5000 --name whitelist whitelist:1.0
运行成功后会返回一个类似GUID的容器编号,然后我们可以查看一下当前运行的容器。
docker ps

如果防火墙没有放行8080端口,可用以下命令放开8080端口。
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

最后我们本机打开浏览器访问CentOS系统的IP并带上8080端口,就可看到我们从Windows上打包的Docker镜像已经成功运行在了CentOS系统的Docker环境下了。

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

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

相关文章

[数据库系统] 五、数据增删改

第一关:数据插入 用insert给数据库添加数据 相关知识 有关系student(sno,sname,ssex,sage,sdept),属性对应含义:学号,姓名,性别,所在系。现有的部分元组如下所示 insert 向数据库表插入数据的基本格式有…

生成 ocr key 字符集 alphabet 6698个字符

生成 ocr key 字符集 alphabet import pickle as pkl#----------- 生成 ocr key 字符集 alphabet alphabet_set set() # 数据集label infofiles_label [/home/jlb/下载/rec_data_lesson_demo/train.txt, /home/jlb/下载/rec_data_lesson_demo/val.txt]# ppocr中文key infofil…

SpringBoot—热部署(Community)

配置热部署 &#x1f50e;引入依赖&#x1f50e;设置 Settings 文章介绍的是社区版 Idea 配置热部署的步骤 &#x1f50e;引入依赖 复制如下代码至 pom.xml 文件中即可 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-b…

无人机遥感在农林信息提取中的实现方法与GIS融合制图教程

详情点击链接&#xff1a;无人机遥感在农林信息提取中的实现方法与GIS融合制图 遥感技术作为一种空间大数据手段&#xff0c;能够从多时、多维、多地等角度&#xff0c;获取大量的农情数据。数据具有面状、实时、非接触、无伤检测等显著优势&#xff0c;是智慧农业必须采用的重…

【夏季旅行团建】趣玩千岛湖-环湖骑行闯关-卡丁车上演速度与激情-刺激高空体验,杭州周边江浙沪团建好去处

千岛湖的秀丽景色让人惊艳&#xff0c;也是江浙沪地区热门的团建目的地之一&#xff1b; 千岛湖隶属于淳安县。从杭州自驾2个小时&#xff0c;高铁1小时&#xff0c;属于国家5A级别的人工湖&#xff0c;前身是新安江水库。拥有星罗棋布的1078个岛屿&#xff0c;是世界上岛屿最多…

AndroidStudio xml布局文件输入没有提示

AndroidStudio xml布局文件输入没有提示&#xff0c;如下图&#xff1a; 原因是老的AndroidStudio与新的sdk版本不一致 方法1&#xff1a;修改compileSdkVersion低于33即可&#xff0c;不建议 方法2&#xff1a;升级AndroidStudio版本&#xff0c;建议 如下是我的AndroidStu…

详解序列化

目录 1.什么是序列化 2.JAVA中的序列化 2.1.成员变量必须可序列化 2.2.transient关键字&#xff0c;可避免被序列化 2.3.无法更新状态 2.4.serialVersionUID 3.JDK序列化算法 4.序列化在实际中的一些应用 1.什么是序列化 序列化就是将对象转换为二进制格式的过程。对象…

MySQL的MMM高可用

MySQL的MMM高可用 一、MMM简介二、搭建MySQL的MMM高可用1、准备环境2、 搭建 MySQL 多主多从模式3、安装配置 MySQL-MMM4、故障测试5、客户端测试 一、MMM简介 MMM&#xff08;Master-Master replication manager for MvSQL&#xff0c;MySQL主主复制管理器&#xff09;是一套…

访问学者申请英语口语怎样顺利通关

想要成功申请成为访问学者&#xff0c;英语口语的流利表达是非常重要的。下面知识人网小编整理的一些帮助你顺利通关的建议&#xff1a; 1. 提前准备&#xff1a;在面试之前&#xff0c;充分准备各种常见问题的回答。练习口语表达&#xff0c;加强词汇和语法的掌握。可以通过与…

如何学习PHP语法和基本概念? - 易智编译EaseEditing

学习PHP语法和基本概念是成为一个合格的PHP开发者的第一步。以下是一些学习PHP语法和基本概念的建议&#xff1a; 官方文档&#xff1a; PHP官方提供了详细的文档&#xff0c;包括语言参考、函数参考和示例等。阅读官方文档是学习PHP语法和基本概念的最佳途径。你可以访问PHP…

企业如何数字化转型?企业数字化转型面临哪些挑战?

一文看懂&#xff1a;传统企业数字化转型会面临哪些困难与挑战&#xff1f;如何有效解决&#xff1f; 目前&#xff0c;数字技术的发展已经从互联网、大数据&#xff0c;迈入了AI人工智能时代。而企业也如逆水行舟、不进则退&#xff0c;如果不进行数字化转型&#xff0c;企业…

AI芯片的基础

前置基础 AI芯片其实就是AI算法的专用处理器&#xff0c;像CPU的话是一个通用处理器&#xff0c;CPU按照逻辑可以分为三个模块&#xff1a;控制模块&#xff0c;运算模块&#xff0c;存储模块&#xff1b;其中控制单元有指令寄存器和指令译码器&#xff0c;根据用户预先编译好…

关于Apache Dubbo反序列化漏洞(CVE-2023-23638)的预警提示与对应的Zookeeper版本

公司在升级dubbo过程中因zookeeper版本不匹配&#xff0c;导致服务注册和调用出现异常 一、漏洞详情 Apache Dubbo是一款高性能、轻量级的开源Java服务框架。 Apache官方发布安全公告&#xff0c;修复了Apache Dubbo中的一个反序列化漏洞&#xff08;CVE-2023-23638&#xff…

系统架构设计师 5:软件工程

一、软件工程 1 软件过程模型 软件要经历从需求分析、软件设计、软件开发、运行维护&#xff0c;直至被淘汰这样的全过程&#xff0c;这个全过程称为软件的生命周期。 为了使软件生命周期中的各项任务能够有序地按照规程进行&#xff0c;需要一定的工作模型对各项任务给予规…

不会设计也能轻松制作商品宣传海报图片,只要跟着这个教程走

促销活动是商家吸引顾客的重要方式之一&#xff0c;而宣传海报则是促销活动中的主要宣传工具之一。好的宣传海报可以让顾客对活动产生兴趣&#xff0c;提高产品的曝光率。然而&#xff0c;对于小型商家来说&#xff0c;往往没有专业的设计人员&#xff0c;如何制作出符合自己需…

项目开发中的安全问题怎么处理?

目录 1.客户的数据不可信 2. 客户端提交的参数需要校验 3.请求头里的内容出现错误 1.客户的数据不可信 PostMapping("/order") public void wrong(RequestBody Order order) {this.createOrder(order); } 对应的实体类如下&#xff1a; Data public class Order …

[框架]MyBatis框架

关于MyBatis框架 MyBatis框架的主要作用&#xff1a;实现并简化数据库编程。 MyBatis框架的依赖项 MyBatis框架的依赖项是&#xff1a;mybatis&#xff0c;但&#xff0c;通常还应该再添加&#xff1a;mybatis-spring、spring-jdbc、mysql或其它数据库的依赖项、数据库连接池…

FreeRTOS_列表和列表项

目录 1. 什么是列表和列表项&#xff1f; 1.1 列表 1.2 列表项 1.3 迷你列表项 2. 列表和列表项初始化 2.1 列表初始化 2.2 列表项初始化 3. 列表项插入 3.1 列表项插入函数分析 3.2 列表项插入过程图示 3.2.1 插入值为 40 的列表项 3.2.2 插入值为 60 的列表项 3…

c++ while(i--) 的执行顺序

问&#xff1a;while (i--) {语句B} 的执行顺序是什么&#xff1f; 首先执行i--,再执行 while ,再执行语言B. 一个案例&#xff1a; 案例中count 的初始值为-3. 第一个打出的为-2&#xff0c; 证明的之前的判断流程。 附录&#xff1a; while(条件){//语句A} 的执行逻辑&…

聊聊PCIe协议的BDF

[摘要]&#xff1a;本文主要介绍 PCIe 协议中 Bus、Device 和 Function 的基本定义。 PCIe 总线的拓扑结构就像一颗葡萄树&#xff1a;树根相当于 PCIe Root Complex&#xff0c;树干和树枝相当于 PCIe Bus&#xff0c;一整串葡萄相当于 PCIe Device&#xff0c;一颗葡萄相当于…