前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >入门云原生:搭建Docker环境以及了解Docker架构

入门云原生:搭建Docker环境以及了解Docker架构

作者头像
Lion 莱恩呀
发布于 2025-05-01 13:17:19
发布于 2025-05-01 13:17:19
1840
举报
概述
本文带你快速入门云原生,从搭建Docker环境开始,详细讲解Docker的安装配置,以及Docker镜像、容器、架构等核心概念。通过实战操作,让你轻松掌握Docker技术,为后续的云原生学习打下坚实基础。
文章被收录于专栏:后端开发技术后端开发技术

一、主机环境搭建与配置

搭建运行环境,以便进行后续的开发和学习。 这里选择 Ubuntu 20.04 LTS (Long Term Support) 作为基础操作系统,因为它稳定、可靠,且拥有广泛的社区支持。

操作系统镜像下载:

  • 建议使用 Ubuntu 20.04.4 LTS 或更高版本。

  • 下载地址:https://mirrors.aliyun.com/ubuntu-releases/20.04/

  • 选择 ubuntu-20.04.5-live-server-amd64.iso 镜像文件。

  • 该镜像可用于在虚拟机 (如 VMware, VirtualBox) 或物理机上安装 Ubuntu Server 系统。 服务器版本占用资源少,适合作为开发环境。

镜像源配置 (加速软件安装):为了加速软件安装和更新速度,建议更换为国内镜像源。 提供两种配置方式。

方法一:在安装过程中配置 (推荐):

  • 在虚拟机安装 Ubuntu 系统时,安装程序通常会询问镜像源配置。

  • 如图所示,可以手动输入镜像服务器地址。 推荐使用阿里云镜像源或其他国内可靠的镜像源。

  • 输入正确的镜像源地址,可以大幅缩短安装时间。

方法二:安装完成后修改 (适用于已安装系统):如果已经安装了 Ubuntu 系统,可以通过修改 /etc/apt/sources.list 文件来更换镜像源。

操作步骤:

  1. 备份 sources.list 文件 (重要!):在修改之前,务必备份原始配置文件,以便在出现问题时可以恢复。 执行命令:

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

  2. 编辑 sources.list 文件: 使用文本编辑器 (例如 vimnano) 打开该文件,并替换其中的默认源地址。

    sudo vim /etc/apt/sources.list

    将文件中所有的 http://archive.ubuntu.com/ubuntu/ 替换为阿里云镜像源地址:http://mirrors.aliyun.com/ubuntu/。 可以选择其他的国内镜像源,例如清华大学、中科大的镜像源。

  3. 更新软件包列表: 修改完成后,保存并关闭文件。 然后执行以下命令来更新软件包列表,使配置生效。

    sudo apt-get update

    该命令会从新的镜像源下载软件包列表,如果一切顺利,就可以更快地安装和更新软件了。

注意事项:

  • 确保选择与您的 Ubuntu 版本相对应的镜像源地址。

  • 在修改配置文件时,请仔细检查,避免出现拼写错误或其他格式错误。

  • 如果 apt-get update 命令报错,请检查网络连接和镜像源地址是否正确。

通过以上步骤,就可以成功搭建 Ubuntu 20.04 主机环境,并配置国内镜像源,为后续的开发工作做好准备。

二、Docker 安装与配置

本节将指导在 Ubuntu 20.04 主机上安装 Docker,并进行一些必要的配置。

(1) Docker 安装 (使用 apt 包管理器):虽然 Docker 提供了多种安装方式,但使用 apt 包管理器是最便捷的方式之一。 也可以参考 Docker 官方文档进行安装,这里提供更简化的步骤。

执行以下命令安装 Docker:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt update # 更新软件包列表,确保安装最新版本 sudo apt install docker.io

Docker 卸载 (如果需要):如果需要卸载 Docker,可以执行以下命令,这将移除 Docker 以及相关的配置和数据:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt-get purge docker.io # 彻底移除 Docker 包 sudo rm -rf /var/lib/docker # 删除 Docker 数据目录 sudo rm -rf /var/lib/containerd # 删除 Containerd 数据目录 (如果存在)

(2) 用户权限配置 (无需 sudo 执行 Docker 命令):默认情况下,执行 Docker 命令需要 sudo 权限。为了方便使用,可以将当前用户添加到 docker 用户组。

添加用户到 docker 组:

代码语言:Bash
换行
自动换行
AI代码解释
sudo usermod -aG docker $USER # 将当前用户添加到 docker 组 newgrp docker # 刷新用户组信息 (或重新登录)

或者,也可以显式地指定用户名:

代码语言:Bash
换行
自动换行
AI代码解释
sudo addgroup <username> docker

重启 Docker 服务:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl restart docker

验证配置:使用 id 命令查看当前用户信息,确认 docker 组已包含在用户所属的组列表中:

代码语言:Bash
换行
自动换行
AI代码解释
id

如果没有 docker 组,可以尝试注销并重新登录。 现在,应该可以在没有 sudo 的情况下执行 Docker 命令了。

(3) 安装 OpenSSH Server (可选,但强烈推荐):OpenSSH Server 允许通过 SSH 远程连接到主机。 这对于远程管理和开发非常有用。

安装 OpenSSH Server:

代码语言:Bash
换行
自动换行
AI代码解释
sudo apt-get update sudo apt-get install openssh-server

配置 OpenSSH Server (可选,但建议配置公钥登录):可以配置 SSH 密钥认证,提高安全性,避免每次输入密码。 具体步骤请参考相关文档。

启动和管理 OpenSSH Server:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl enable ssh # 设置开机启动 sudo systemctl restart ssh # 重启 SSH 服务 sudo systemctl status ssh # 查看 SSH 服务状态

确保 SSH 服务正在运行,并且可以通过端口 22 连接。

(4) 设置 Docker 镜像加速器 (可选,但强烈推荐):由于 Docker Hub 位于国外,拉取镜像的速度可能较慢。 配置镜像加速器可以显著提高镜像下载速度。

编辑 Docker 配置文件:不同版本的 Docker 配置文件位置可能略有不同,通常位于 /etc/docker/daemon.json。 如果该文件不存在,则创建它。

代码语言:Bash
换行
自动换行
AI代码解释
sudo mkdir -p /etc/docker sudo nano /etc/docker/daemon.json

添加镜像加速器地址:将以下 JSON 内容添加到 /etc/docker/daemon.json 文件中 (替换为你选择的镜像源):

代码语言:JSON
换行
自动换行
AI代码解释
{ "registry-mirrors": [ "https://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://registry.docker-cn.com" ] }

可以选择多个镜像源,Docker 会自动尝试。 推荐使用阿里云或网易云的镜像源,速度较快。

重启 Docker 服务:

代码语言:Bash
换行
自动换行
AI代码解释
sudo systemctl restart docker

验证配置:执行 docker info 命令,检查输出中是否包含 Registry Mirrors 字段,并且列出了配置的镜像加速器地址。

通过以上步骤,就成功安装了 Docker,并进行了必要的用户权限配置和镜像加速器设置。 为后续的 Docker 容器化开发奠定基础。

三、Docker 简介

Docker 是一种流行的容器化技术,提供了一个高效、可移植的平台,用于构建、发布和运行分布式应用程序。 Docker 的核心思想是将应用程序及其所有依赖项(例如库、运行时环境和配置文件)打包到一个称为容器的独立单元中。 容器彼此隔离,并与底层操作系统隔离,从而确保应用程序在各种环境中以一致的方式运行。

3.1、Docker 解决的关键问题

  • 环境一致性问题: Docker 解决了应用程序在开发、测试和生产环境中运行不一致的问题。 通过将应用程序及其依赖项打包到容器中,可以确保应用程序在任何支持 Docker 的平台上都能以相同的方式运行,避免了 "在我机器上运行正常" 的问题。

  • 资源管理问题: Docker 容器允许对应用程序的资源使用情况进行精细控制。 可以在创建容器时指定内存和 CPU 限制,从而确保应用程序不会占用过多的系统资源,并提高整体资源利用率。

  • 快速扩展和弹性伸缩: Docker 容器启动速度快,资源占用少,使得应用程序的快速扩展和弹性伸缩变得简单。 可以根据需要快速部署新的容器,并根据负载自动调整容器的数量。

3.2、Docker 的技术边界

Docker 主要针对应用及其依赖环境进行容器化,遵循单一职责原则。 最佳实践是每个容器只运行一个主进程。 将多个进程部署在同一个容器中存在以下弊端:

  • 更新困难: 更新单个进程的镜像会导致整个容器重启,影响其他进程的可用性。

  • 故障扩散: 一个进程出现问题可能导致整个容器崩溃,影响容器内所有进程。

  • 违反单一职责原则: 容器应该代表一个独立的、可部署的单元。

如果需要在单个 Docker 实例中运行多个应用程序,建议采用以下方法:

  • 使用进程管理工具: 例如 Supervisor 或 systemd,在容器内启动一个守护进程来管理多个应用程序。

  • 使用 Docker Compose: 使用 Docker Compose 定义和管理多容器应用程序。

3.3、Docker 带来的变革

  • 软件交付方式的变革: Docker 简化了软件的构建、发布和部署流程,实现了应用程序的快速交付。

  • 虚拟机替代方案: Docker 容器比虚拟机更轻量级、启动速度更快,资源占用更少,在某些场景下可以作为虚拟机的替代方案。

  • 用户体验的提升: Docker 简化了软件的安装和使用过程,用户可以通过简单的命令快速部署和运行应用程序。

  • 企业成本的降低: Docker 提高了资源利用率,降低了基础设施成本,并简化了应用程序的管理和维护。

  • 持续集成/持续部署 (CI/CD) 的推动: Docker 为 CI/CD 流程提供了可靠的基础,使得应用程序的持续集成和持续部署成为可能。

  • 微服务架构的促进: Docker 容器轻量级、可移植的特性非常适合微服务架构,每个微服务可以打包成一个独立的容器,实现独立部署和扩展。

3.4、Docker 与虚拟机的区别

特性

Docker (容器)

虚拟机 (VM)

虚拟化级别

操作系统级别虚拟化 (共享内核)

硬件级别虚拟化 (完整操作系统)

资源占用

轻量级 (资源占用少,启动速度快)

重量级 (资源占用多,启动速度慢)

镜像大小

通常较小 (几 MB 到几百 MB)

通常较大 (几 GB 到几十 GB)

隔离性

共享内核,隔离性相对较弱

完整操作系统,隔离性强

启动速度

秒级

分钟级

应用场景

应用开发、快速部署、微服务

资源隔离、运行多个操作系统、服务器整合

核心解决的问题

应用开发、测试和部署的环境一致性问题

资源调配、硬件资源的虚拟化

是否包含 Guest OS

No

Yes

3.5、Docker 架构图

  • 镜像 (Image): Docker 镜像是一个只读的模板,用于创建 Docker 容器。 它包含应用程序及其所有依赖项。 可以将镜像视为一个应用程序的快照。 例如,一个 Ubuntu 镜像包含 Ubuntu 操作系统的基本文件系统和工具。

  • 容器 (Container): 容器是 Docker 镜像的运行时实例。 它是一个独立运行的进程,包含应用程序及其所有依赖项。 容器是可写的,可以在其中运行应用程序、修改文件和安装软件。

  • 客户端 (Client): Docker 客户端是用户与 Docker 守护进程交互的工具。 客户端可以通过命令行或 API 与守护进程通信。

  • 主机 (Host): Docker 主机是运行 Docker 守护进程和容器的物理或虚拟机。

  • 注册中心 (Registry): Docker 注册中心是存储和共享 Docker 镜像的仓库。 Docker Hub 是一个公共的注册中心,包含了大量的官方和社区镜像。 您也可以搭建私有的 Docker 注册中心,用于存储和管理私有镜像。

  • Docker Machine (已逐渐被其他工具替代): Docker Machine 是一个用于简化 Docker 安装的工具,可以帮助您在不同的平台上(例如本地机器、云服务器)安装 Docker。

3.6、直观感受

通过一个简单的示例,演示 Docker 客户端如何通过 Socket 与 Docker 守护进程通信。

  1. 安装 socat:

    sudo apt update sudo apt install socat

  2. 使用 socat 监听 Unix Socket:

    socat -v UNIX-LISTEN:/tmp/dockerapi.sock UNIX-CONNECT:/var/run/docker.sock &

    • socat 是一个多功能的网络工具,用于在两个数据流之间建立连接。

    • -v 参数用于显示详细的通信信息。

    • UNIX-LISTEN:/tmp/dockerapi.sock 指定 socat 监听 /tmp/dockerapi.sock Unix Socket。

    • UNIX-CONNECT:/var/run/docker.sock 指定 socat 连接到 Docker 守护进程的 Unix Socket (/var/run/docker.sock)。

    • & 将 socat 命令放到后台运行。

  3. 使用 Docker 客户端与 socat 建立连接:

    docker -H unix:///tmp/dockerapi.sock ps

    • -H unix:///tmp/dockerapi.sock 指定 Docker 客户端连接到 /tmp/dockerapi.sock Unix Socket。

    • ps 命令用于列出正在运行的 Docker 容器。

  4. 会看到 Docker 客户端通过 socat 发送 HTTP 请求到 Docker 守护进程,并接收来自守护进程的响应。 这证明了 Docker 客户端和守护进程之间的通信是基于 Socket 的。

    > 2022/12/04 09:21:30.864275 length=82 from=0 to=81 HEAD /_ping HTTP/1.1\r Host: docker\r User-Agent: Docker-Client/20.10.12 (linux)\r \r < 2022/12/04 09:21:30.865645 length=281 from=0 to=280 HTTP/1.1 200 OK\r Api-Version: 1.41\r Cache-Control: no-cache, no-store, must-revalidate\r Content-Length: 0\r Content-Type: text/plain; charset=utf-8\r Docker-Experimental: false\r Ostype: linux\r Pragma: no-cache\r Server: Docker/20.10.12 (linux)\r Date: Sun, 04 Dec 2022 09:21:30 GMT\r \r > 2022/12/04 09:21:30.869675 length=97 from=82 to=178 GET /v1.41/containers/json HTTP/1.1\r Host: docker\r User-Agent: Docker-Client/20.10.12 (linux)\r \r < 2022/12/04 09:21:30.870824 length=205 from=281 to=485 HTTP/1.1 200 OK\r Api-Version: 1.41\r Content-Type: application/json\r Docker-Experimental: false\r Ostype: linux\r Server: Docker/20.10.12 (linux)\r Date: Sun, 04 Dec 2022 09:21:30 GMT\r Content-Length: 3\r \r [] CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

通过这个示例,了解 Docker 客户端和守护进程之间如何通过 Socket 进行通信,为理解 Docker 的内部工作原理打下了基础。

四、总结

  1. Docker可以安装多个应用程序,但是Docker只有一个程序入口,也就是docker的启动命令只有一条。

  2. Docker和虚拟机不一样,Docker本身是一个软件,管理自己的进程,没有虚拟硬件设备。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
POI 操作word
关于POI 操作word的基础知识在这个博客(http://elim.iteye.com/blog/2049110)中有非常清晰的解释,在这里我就不多解释了 
凯哥Java
2019/06/28
3.4K0
POI 操作word
C#使用NPOI进行word的读写
如果不进行页面大小的设置,默认是纵向的A4大小。横向的A4的页面大小 ,如果要纵向,宽高两个值调换即可。
zls365
2021/03/16
7.7K1
word导出03
 public static void exportWordImg(String wordpath,List<String> contentlist,String[] imglist) throws Exception{         exportQuestionWord t=new exportQuestionWord();         WordprocessingMLPackage wordMLPackage = t.createWordprocessingMLPackage();         MainDocumentPart mp = wordMLPackage.getMainDocumentPart();         ObjectFactory factory = Context.getWmlObjectFactory();         //图片页眉         //Relationship relationship =t.createHeaderPart(wordMLPackage, mp, factory);         //文字页眉         //Relationship relationship =t.createTextHeaderPart(wordMLPackage, mp, factory, "页眉", JcEnumeration.CENTER);         //t.createHeaderReference(wordMLPackage, mp, factory, relationship);         t.addParagraphTest(wordMLPackage, mp, factory,contentlist,imglist);         //t.addPageBreak(wordMLPackage, factory);         //t.createNormalTableTest(wordMLPackage, mp, factory);         //页脚         //relationship =t.createFooterPageNumPart(wordMLPackage, mp, factory);         //t.createFooterReference(wordMLPackage, mp, factory, relationship);         t.saveWordPackage(wordMLPackage, new File(wordpath));     }     public void addParagraphTest(WordprocessingMLPackage wordMLPackage,                                  MainDocumentPart t, ObjectFactory factory,List<String> contentlist,String[] imglist) throws Exception {         RPr titleRPr = getRPr(factory, "黑体", "000000", "30", STHint.EAST_ASIA,                 true, false, false, false);         RPr boldRPr = getRPr(factory, "宋体", "000000", "24", STHint.EAST_ASIA,                 true, false, false, false);         RPr fontRPr = getRPr(factory, "宋体", "000000", "22", STHint.EAST_ASIA,                 false, false, false, false);         P paragraph=factory.createP();         Text txt = null;         R run=null;         File file=null;         InputStream is=null;         if(contentlist!=null || contentlist.size()>0){         for (int i = 0; i < contentlist.size(); i++) {             if(contentlist.get(i).contains("22.发生肺水肿时的应急处理错误的是")){
Dlimeng
2023/06/29
2050
批量修改公式的字号和大小
MathType是一个由美国 Design Science 公司开发的强大的数学公式编辑器,它同时支持 Windows 和 Macintosh 操作系统,与常见的文字处理软件和演示程序配合使用,能够在各种文档中加入复杂的数学公式和符号,帮助用户快速建立专业化的数学技术文档。
FreeRonin
2019/07/17
1.7K0
批量修改公式的字号和大小
.NET Core使用NPOI导出复杂Word详解
  最近使用NPOI做了个导出Word文档的功能,关于使用.NET Core 导出Word文档的方式有很多。最终我为什么选择了NPOI来实现了这个功能,首先是NPOI是一个开源,免费且容易上手的第三方框架(并且现在已支持.NET Core,GitHub源码地址:https://github.com/tonyqus/npoi)。因为之前使用NPOI导出Execl比较多,这次第一次使用NPOI 来导出Word文档还真没有什么头绪。首先看了下GItHub中的源码有一个简单Word导出的示例,然后在看了网上有很多关于NPOI导出Word文档的案例,发现一个特点网上的好像都差不多,对于我而言网上的这些案例完全能够实现我的这个功能,但是感觉看了网上这些案例对NPOI实例化段落,表格和设置相关样式不太清楚(可能是因为自己笨),并且假如使用网上的方法来实现我的功能的话代码量会比较大,而且感觉代码非常的冗余(我是一个追求代码简洁的人,怎么能够容忍这样的事情发生呢!),因此通过查阅了一些资料和自己的理解,把关于使用NPOI导出Word时所要涉及的一些段落,表格样式做了相关注释,和把段落和表格的创建实例,设置文字、字体、对齐方式都封装了起了(为了少写代码),文章末尾会附上一个完整的案例下载地址。
追逐时光者
2019/09/30
4.2K0
.NET Core使用NPOI导出复杂Word详解
iText的使用
首先要getInstance并open一个Document对象,该对象也就代表了这个文件:
LeoXu
2018/08/15
2.5K0
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
你好!这是由一个刚毕业的学生,由于项目所需,需要通过Java后台的方式打印Word文档,因此在对大量能操作word的Java API中,选择了Apache POI。以下将简单分享一下这个在学习和开发这个基于POI的word文档打印工具时,一些心得:
RRT冻羊
2022/11/03
4.4K0
[实用][更新中]Java Apache POI 打印Word文档工具(含文本替换,动态表格功能)
clicaptcha中文点击验证码开发经验总结
  现在的验证码真是越来越高级了,12306 的找图验证码,极验的拖动式验证码,还有国外的一些黑科技,能智能判断你是不是机器人的验证码。   验证码的更新迭代让我突然对传统验证码一下子不满足了,出于挑战自我和对自己技能的修炼,我用了一周的时间写了一个简单的 demo ,然后又花了一周时间将其优化成插件的形式,于是 Clicaptcha 就诞生了。   简单介绍下 Clicaptcha ,它是由 click 和 captcha 这两个单子合并而成,顾名思义,这是一个点击验证码,那怎么个点击验证呢?整个操作流程
胡尐睿丶
2018/01/11
2.7K0
clicaptcha中文点击验证码开发经验总结
Java中用Apache POI生成excel和word文档
最近在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能,最后决定用Apache POI来完成该项功能。本文就项目实现过程中的一些思路与代码与大家共享,同时,也作为自己的一个总结,以备后用。
牛老师讲GIS
2018/10/23
3.3K0
Java中用Apache POI生成excel和word文档
Java实现word文档在线预览,读取office(word,excel,ppt)文件
想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览。 一、使用openoffice方式实现word预览 主要思路是: 1.通过第三方工具openoffice,将word、excel、ppt、txt等文件转换为pdf文件 2.通过swfTools将pdf文件转换成swf格式的文件 3.通过FlexPaper文档组件在页面上进行展示 我使用的工具版本: openof:3.4.1 swfT
二十三年蝉
2018/05/09
38.3K4
教程 | Python 实现 Word 文档操作...
我们在Word中输入文字时,一般会先使用鼠标点击需要输入文字的位置,这个过程是获得了光标焦点。
昱良
2019/07/31
3.8K0
教程 | Python 实现 Word 文档操作...
python_docx制作word文档
Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把word文档,文档中的段落、文本、字体等都看做对象,对对象进行处理就是对word文档的内容处理。
py3study
2020/01/15
3.2K0
python_docx制作word文档
零代码编程:用ChatGPT批量设置Word文件格式
文件夹中有很多txt文本文件,要转换成word文件,且要批量设置一些文件格式,方便后续的打印。
AIGC部落
2024/06/24
3080
零代码编程:用ChatGPT批量设置Word文件格式
html可以转换成word_html显示word文档
项目后端使用了springboot,maven,前端使用了ckeditor富文本编辑器。目前从html转换的word为doc格式,而图片处理支持的是docx格式,所以需要手动把doc另存为docx,然后才可以进行图片替换。
全栈程序员站长
2022/11/08
8.4K0
html可以转换成word_html显示word文档
职场人必备的WORD排版十大技巧
1.页面设置快速进行调整 问:要对 Word 进行页面调整,通常大家采用的方法是选择“文件→页面设置”选项的方法进行,请问有没有更快速方便的方法呢? 答:有,如果要进行“页面设置”,只需用鼠标
用户1756920
2018/06/20
1.6K0
Python自动化办公 | 同事要我帮忙补写178份Word日报!别闹!
首先让我们来看看数据样本和输出文档的需求(敏感数据已做和谐处理):原始 excel 文件中有 n 个子表,每个子表为一天的数据,存在无记录和有记录(部门数 ≥ 1,每个部门记录数 ≥ 1)两种情况,需分别整理成两种日报,一为纯文本描述,二为附带表格的文档。
朱小五
2020/09/24
1K0
Python自动化办公 | 同事要我帮忙补写178份Word日报!别闹!
在线图片转换成word的方法_html 转word
项目后端使用了springboot,maven,前端使用了ckeditor富文本编辑器。目前从html转换的word为doc格式,而图片处理支持的是docx格式,所以需要手动把doc另存为docx,然后才可以进行图片替换。
全栈程序员站长
2022/11/04
20.4K0
在线图片转换成word的方法_html 转word
【API使用系列】Core Text专题
https://developer.apple.com/library/mac/#documentation/Carbon/Reference/CoreText_Framework_Ref/_index.html
江中散人_Jun
2022/03/08
9360
【API使用系列】Core Text专题
学会Python自动制作Word,将看到一个5天4位数的赚钱机会
周二推了一篇Python编辑ppt的文章,行哥告诉读者学会重复处理PPT接单兼职更加高效。因为Python是一种生产工具,掌握生产工具后就应该拿去尝试赚钱。
行哥玩Python
2020/07/14
1.2K0
学会Python自动制作Word,将看到一个5天4位数的赚钱机会
itext7史上最全实战总结
最近有个需求需要我用Java手动写一份PDF报告,经过考察几种pdf开源代码,最终选取了itext7,此版本为7.1.11,由于发现网上关于该工具的博文比较少,特别是实战博文几乎没有,在我踩完各种坑,最终把PDF成型后,打算把经验分享出来,本文通过摘录解释来说明,内容来自本人GitHub itext-pdf
老梁
2020/06/02
7.3K1
相关推荐
POI 操作word
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档