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

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

时间:2023-06-26 18:14:24浏览次数:48  
标签:CentOS NETCore Windows list apt etc 镜像 Docker docker

在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文件复制到发布目录中,然后运行PowShell,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环境下了。

标签:CentOS,NETCore,Windows,list,apt,etc,镜像,Docker,docker
From: https://www.cnblogs.com/wdw984/p/17506272.html

相关文章

  • 升级CentOS 7.9内核
    1.背景不知道大家有没有遇到过这样的问题,在使用docker创建vlan网络时,会提示“Errorresponsefromdaemon:kernelversionfailedtomeettheminimumipvlankernelrequirementof4.2,found3.10.0”,需要最新的稳定版。看一下系统的内核版本,使用以下命令:uname-a先导入......
  • Visual Basic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用
    VisualBasic(简称VB)是一种编程语言,由微软公司开发。它是基于事件驱动的编程语言,主要用于Windows操作系统上的应用程序开发。在VisualBasic中,可以使用图形用户界面(GUI)来创建各种应用程序,包括桌面应用程序、数据库应用程序、Web应用程序等。VisualBasic提供了许多现成的控件和工......
  • Python3 windows下 多环境管理
     windows下Python多环境隔离,每个项目拥有独立的依赖库,即site-packages。 ubuntu下通过 Anaconda 进行多环境操作, windows下往往直接下载安装包安装了(之前一直没去解决单个环境)现在整理下如下, 方式一(略,安装包有点大)1.官网下载Anaconda安装包下载地址:https://www......
  • 使用云镜像 Centos7 镜像模板命令初始化
    安装kvm镜像工具套装 CentOS-7-x86_64-GenericCloud-2111.qcow2aptinstall-ylibguestfs-toolsyuminstall-ylibguestfs-toolslibguestfs-winsupportguestfishshell脚本#!/bin/envbashset-eimage_name=CentOS-7-x86_64-GenericCloud-2111.qcow2virt-customize-......
  • centos添加服务
    一、添加服务启动脚本#!/bin/bashexportJAVA_HOME=/usr/java/jdk1.8.0_201exportPATH=$JAVA_HOME/bin:$PATH#注意,这里的文件都必须是绝对路径nohupjava-jar/luban/app/deploy/deploy-0.0.1-SNAPSHOT.war>/luban/app/deploy/nohup.out&echo"启动完成"二、添......
  • NETCORE - 动态类型 dynamic 取值
    NETCORE-动态类型dynamic取值环境:.NET6+WebApi 控制器传参时,使用dynamic 安装nuget 包 Program.cs 中//添加对象序列化程序为Newtonsoft.Jsonbuilder.Services.AddControllers().AddNewtonsoftJson(options=>{options.SerializerSettings.ContractR......
  • centos7 升级sqlite
    软件下载地址均为其官网。一.wget升级yuminstall-ywget 二.sqlite3安装sudoyuminstallsqlite-devel查看sqlite3的版本sqlite3-version三.sqlite3升级下载源码wgethttps://www.sqlite.org/2019/sqlite-autoconf-3290000.tar.gz版本可去官网选择SQLiteHome......
  • Windows/Linux上如何配置NTP时间同步
    前几天装了几台VirtualBox虚机(CentOS),结果发现GuestAdditionalTool不定期出现无法从宿主机(Windows)同步时间的问题,折腾了好久,感觉是GuestAdditionalTool的bug,索性直接用NTP来同步虚机和宿主机的时间。Windows启动NTP服务:点击“运行”按钮,在运行窗口中执行services.msc命令......
  • Windows Server操作系统中的DHCP Server Service是一种集成在操作系统中的功能,用于提
    WindowsServer操作系统中的DHCPServerService是一种集成在操作系统中的功能,用于提供DHCP服务器服务。它可以在WindowsServer上设置和管理DHCP服务器,实现自动分配IP地址和其他网络配置信息给连接到网络的设备。DHCPServerService在WindowsServer中提供以下功能和特性:IP地......
  • Microsoft PostScript和PCL6 Class打印机驱动是Windows操作系统提供的标准打印机驱动
    MicrosoftPostScript和PCL6Class打印机驱动是Windows操作系统提供的标准打印机驱动程序,用于支持PostScript和PCL6语言的打印机设备。这些类打印机驱动程序是为了方便用户在Windows操作系统上使用广泛的打印机设备而开发的。它们可以与各种厂商的打印机兼容,并为用户提供基本的打......