加入收藏

环球新动态:.NETCore项目在Windows下构建Docker镜像并本地导出分发到CentOS系统下

2023-06-27 11:49:27 来源:博客园

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

Docker Desktop介绍及安装

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


(资料图片)

Docker EngineDocker CLI clientDocker BuildxExtensionsDocker ComposeDocker Content TrustKubernetesCredential 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 baseWORKDIR /WhiteListEXPOSE 5000COPY . .RUN touch /etc/apt/sources.listRUN 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.listENV TZ=Asia/ShanghaiRUN apt-get update -y #RUN apt-get upgrade -yRUN apt-get install -y libgdiplusRUN apt-get cleanRUN ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dllRUN ln -fs /usr/share/zoneinfo/${TZ} /etc/localtime \    && echo ${TZ} > /etc/timezoneENV ASPNETCORE_URLS http://+:5000ENTRYPOINT ["dotnet", "WhiteList.dll"]

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

Docker镜像打包发布

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

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

Docker Desktop中的Linux系统

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

cat /etc/issueDebian GNU/Linux 10

cat /proc/versionLinux 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

安装Dockeryum install docker-ce

启动Dockersystemctl start docker

设置Docker为开机自启systemctl enable docker

查看Docker的版本信息docker --versionDocker 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 --permanentfirewall-cmd --reload

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

关键词:

相关新闻

资讯

创世老兵文化艺术团在京举办庆“七一”诗歌朗诵会
创世老兵文化艺术团在京举办庆“七一”诗歌朗诵会

6月26日下午,以赓续红色血脉,展示老兵风采为主题的......更多>

宗师已打开了高端市场,“新大师”是不是会以更诚意的价格回归市场?
宗师已打开了高端市场,“新大师”是不是会以更诚意的价格回归市场?

如果你要买一台MPV,一定绕不开广汽传祺。过去6年,广......更多>

天津市爱国主义教育基地面向全国发起爱国主义教育研学、游学、访学工程
天津市爱国主义教育基地面向全国发起爱国主义教育研学、游学、访学工程

为了增强全民爱国意识,打造民众爱国情怀,了解国家发展......更多>

维谛技术(Vertiv)助力中国联通深圳同乐机房改造 PUE降至1.2+
维谛技术(Vertiv)助力中国联通深圳同乐机房改造 PUE降至1.2+

在“能耗双控”和“双碳”背景下,节能政策逐渐趋紧,......更多>

阿拉丁统计 2.0丨基础统计“开箱即用”  日常数据查询必备“神器”
阿拉丁统计 2.0丨基础统计“开箱即用” 日常数据查询必备“神器”

不知不觉已经到了阿拉丁统计 2 0 功能系列的最后一......更多>

哈尔滨电动车登记上牌流程 今日热议
哈尔滨电动车登记上牌流程 今日热议

1、扫描二维码关注公众号黑龙江交警2、点击“电动车”......更多>

当前热点-一年生花卉有哪些 一年生花卉
当前热点-一年生花卉有哪些 一年生花卉

1、百日草为一年生花卉,侧枝呈杈状分枝,夏秋开花,......更多>

沪深股通|天宇股份6月26日获外资卖出0.03%股份
沪深股通|天宇股份6月26日获外资卖出0.03%股份

同花顺数据显示,2023年6月26日,天宇股份获外资卖出7......更多>

环球观点:诉前财产保全的注意事项都有哪些?财产保全有效期多久?|每日聚焦
环球观点:诉前财产保全的注意事项都有哪些?财产保全有效期多久?|每日聚焦

一、诉前财产保全必备材料清单诉前财产保全必备材料清......更多>

关注

前5个月造船三大指标全面增长 天天微资讯
前5个月造船三大指标全面增长 天天微资讯
中国船舶工业行业协会近日发布今年1-5月船舶工业经济... 更多>
前5个月造船三大指标全面增长 天天微资讯
中国船舶工业行业协会近日发布今年1-5月船舶工业经济... 更多>
天天快报!九洲药业:控股子公司获得格列齐特缓释片的药品注册证书
金融界6月26日消息九洲药业公告,控股子公司浙江九洲... 更多>
【天天新要闻】高合需要撕掉“土豪”标签
高合需要撕掉“土豪”标签,高合,宾利,劳斯莱斯,上海车展 更多>
36万左右大众7座中大型SUV推荐,看完这几款车再买不后悔!
如果想买一款36万左右大众7座中大型SUV车型,很多人纠... 更多>
世界新动态:四种方式可查中考分数 时间节点要注意
根据中考招生工作安排,6月28日将公布成绩,并开始填... 更多>
快报:公共 | 2022年山东受理各类毒品犯罪案件701件
2022年,全省法院共受理各类毒品犯罪案件701件,同比... 更多>
问政|网友反映三合湖路灯开放问题,垫江有关部门回复了!
点击蓝字关注我们今天的网络问政官方回复来了!看看有... 更多>
官宣!巴萨免签32岁曼城队长京多安
官方消息,32岁京多安免签加盟巴萨,签约3年。 更多>
焦点快播:近期北京演出多“黄牛”频露头?便衣警察随时闪现!
近期北京演出多“黄牛”频露头?便衣警察随时闪现! 更多>
19.33万人次!青岛机场2023年端午小长假旅客量再创新高 天天观点
青岛新闻网6月26日讯(记者张晓楠)2023年端午小长假... 更多>
女子深夜跑4家医院取扇形鱼刺 世界热讯
女子深夜跑4家医院取扇形鱼刺---6月24日晚,不少市民... 更多>
消费镜像:女性都市小说与消费主义文化研究
1、《消费镜像女性都市小说与消费主义文化研究》是200... 更多>