docker run与docker exec命令细节(以简单修改默认界面为例子)

docker run 命令细节

docker run [参数] 镜像名/唯一id
-d代表后台启动,使用docker ps 会打印容器的完整id
–name 给容器起个名字,如果不使用–name则系统给出一个随机名字,

浏览器如何访问容器

原因:我们启动的容器是运行在我们自己的环境中的,每一个容器互相隔离且在主机中运行,每一个容器都拥有自己完整的文件系统,run启动就相当于将镜像安装到容器里边,采用80端口,想要访问这个镜像的话要访问主机中的相应容器,直接从浏览器访问是不现实的。
解决方法:
-p 外部端口:内部端口
访问指定外部端口就等同与访问指定内部端口------端口映射
例如:docker run -d --name myj -p 80:80 nginx
输出:全部id,
docker ps
输出的ports中显示0.0.0.0:80->80/tpc表示任何IP访问80端口就是容器内部的命令

如果再启动一个容器,内部能否再次使用80端口,外部继续使用80端口?

外部端口80可以重复,因为外部端口是占用主机的同一个机器只能拥有一个端口
内部端口也是可以重复的,因为主机内部的容器是相互隔离的,我有我的80端口,他有他的80端口,启动一个容器类似于构建一个虚拟机

docker exec 命令细节

如果要修改页面,就需要使用docker exec进入容器里,在容器中有一个文件路径存放默认页,那如何寻找默认页呢?此镜像的官方文档/hub.docker.com,介绍页面中有static content
docker exec -it 容器名或唯一id /bin/bash
-it参数表示以交互模式
/bin/bash表示使用交互模式使用bash控制台
此时就会进入容器当中,容器相当于一个极简的Linux,可以使用ls查看目录结构,
在其中修改页面时使用输出excho “内容” >index
cat 页面文件路径,查看结果
使用exit推出容器进入主机

<think>嗯,用户想在C#中处理TrueType字体文件,需要方法和示例。首先,我得回忆一下C#中有哪些库可以处理字体。之前记得System.Drawing命名空间里有Font类,可以用来加载字体,但可能仅限于Windows环境。另外,用户提到的PDFSharp可能也是相关的,因为引用里提到PDFSharp支持TrueType字体,所以可能需要用PDFSharp的API来处理字体嵌入。 然后,用户可能需要具体的代码示例。比如如何读取字体文件,获取字体信息,或者将字体嵌入到PDF中。根据引用2,使用TTFont类来读取TTF文件,并获取字体名称。那在C#中是否有类似的类?可能需要查看PDFSharp的文档,看看他们的字体处理部分。 另外,用户可能想知道如何动态加载字体文件,而不是安装到系统。比如,在ASP.NET应用中,上传的字体文件需要临时加载使用。这时候可能需要用PrivateFontCollection来加载,这样不会影响系统字体。记得System.Drawing.Text命名空间里有这个类,可以用来添加字体文件,然后创建Font对象。 还需要考虑跨平台的情况,比如在.NET Core中使用,可能需要确认System.Drawing.Common是否可用,或者是否有其他替代库。比如,使用SixLabors.Fonts可能更跨平台,但用户可能更倾向于官方库或者PDFSharp的方法。 可能还需要处理字体嵌入到PDF中的情况。PDFSharp的XFont构造函数可能需要指定字体族名称和样式,所以需要正确获取这些信息。例如,使用TTFont获取字体名称后,传递给XFont。 另外,异常处理也很重要,比如字体文件不存在或格式错误时的处理,需要提醒用户添加try-catch块。 总结步骤应该是:1. 使用System.Drawing加载字体并获取信息;2. 使用PDFSharp处理PDF中的字体嵌入;3. 动态加载字体。每个步骤给出示例代码,并解释关键点。同时,注意引用中的PDFSharp支持情况,确保示例正确。 可能的问题:用户是否了解如何引用必要的库?比如添加对System.Drawing.Common或PDFSharp的NuGet包。在回答中应该提到需要安装这些包,并导入相应的命名空间。 最后,生成的相关问题可能需要涉及性能优化、跨平台问题或字体子集化等高级主题。</think>在C#中处理TrueType字体文件可以通过多种方式实现,以下是具体方法和示例: ### 一、使用System.Drawing读取字体信息 ```csharp using System.Drawing; using System.Drawing.Text; public void ReadFontInfo(string fontPath) { PrivateFontCollection fontCollection = new PrivateFontCollection(); fontCollection.AddFontFile(fontPath); // 加载字体文件 FontFamily family = fontCollection.Families[0]; Console.WriteLine($"字体名称: {family.Name}"); Console.WriteLine($"是否支持粗体: {family.IsStyleAvailable(FontStyle.Bold)}"); } ``` 此方法通过PrivateFontCollection实现字体文件的动态加载,无需安装到系统[^2]。 ### 二、PDFSharp嵌入字体示例 ```csharp using PdfSharp.Drawing; using PdfSharp.Pdf; public void CreatePdfWithCustomFont() { PdfDocument document = new PdfDocument(); PdfPage page = document.AddPage(); // 加载TrueType字体 XFont font = new XFont("Arial", 12, XFontStyle.Regular, new XPdfFontOptions(PdfFontEncoding.Unicode)); XGraphics gfx = XGraphics.FromPdfPage(page); gfx.DrawString("Hello PDFSharp!", font, XBrushes.Black, new XPoint(20, 20)); document.Save("output.pdf"); } ``` 注意:实际使用时需确保字体文件路径正确,PDFSharp默认支持TrueType字体嵌入[^1]。 ### 三、动态加载字体绘制文本 ```csharp using System.Drawing; using System.Drawing.Text; using System.Runtime.InteropServices; public Bitmap RenderTextWithCustomFont(string fontPath, string text) { PrivateFontCollection pfc = new PrivateFontCollection(); pfc.AddFontFile(fontPath); Font font = new Font(pfc.Families[0], 12); Bitmap bmp = new Bitmap(400, 200); using (Graphics g = Graphics.FromImage(bmp)) { g.DrawString(text, font, Brushes.Black, new PointF(10, 10)); } return bmp; } ``` **关键注意事项:** 1. 需要引用`System.Drawing.Common`包(.NET Core) 2. 字体文件路径需使用绝对路径 3. 使用完PrivateFontCollection后应调用`Dispose()`释放资源 4. PDFSharp的字体缓存机制可能影响多次加载
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值