Docker系列 学习Docker之前
本文最后更新于 55 天前,如有失效请评论区留言。

前言

经过Linux基础 个人VPS安全的相关设置,相信你的VPS的安全性已经大在地提升了。同时你对linux命令的使用应该也更加熟悉了!如果你使用的是国外的VPS和域名,甚至不需要备案就可以开始搭建互联网服务了,比如个人图床、个人博客了。

我建议你搭建互联网服务的时候尽量用同一个平台。当然,在本博客中,我将推荐通过Docker的方式来搭建互联网服务。

什么是Docker?

我直接粘贴wiki上的原话哈,自己可以去看这个:https://en.wikipedia.org/wiki/Docker_(software)

Docker是一组平台即服务(PaaS) 产品,它使用操作系统级别的虚拟化在称为容器(Container)的包中交付软件。该服务有免费和高级两种。托管容器的软件称为Docker Engine。它于 2013 年首次启动,由Docker, Inc.开发。

Docker容器相互隔离,并捆绑了自己的软件、库和配置文件;他们可以通过明确定义的渠道相互交流。因为所有容器共享单个操作系统内核的服务,所以它们使用的资源比虚拟机少。

Docker 可以将应用程序及其依赖项打包到可以在任何 Linux、Windows 或 macOS 计算机上运行的虚拟容器中。这使应用程序能够在各种位置运行,例如本地、公共或私有云中。在 Linux 上运行时,Docker 使用Linux 内核的资源隔离特性(如cgroups和内核命名空间)和支持联合的文件系统(如OverlayFS)允许容器在单个 Linux 中运行例如,避免启动和维护虚拟机的开销。macOS上的 Docker使用 Linux虚拟机来运行容器。

由于 Docker 容器是轻量级的,单个服务器或虚拟机可以同时运行多个容器。2018 年的一项分析发现,典型的 Docker 用例涉及每台主机运行 8 个容器,四分之一的分析组织每台主机运行18个或更多。

Linux 内核对命名空间的支持主要隔离了应用程序对操作环境的视图,包括进程树、网络、用户 ID 和挂载的文件系统,而内核的 cgroups 为内存和 CPU 提供资源限制。从 0.9 版开始,Docker 包含了自己的组件(称为“ libcontainer ”),以使用 Linux 内核直接提供的虚拟化设施,此外还通过libvirt、LXC和systemd-nspawn使用抽象的虚拟化接口。

Docker 实现了一个高级API来提供独立运行进程的轻量级容器。Docker 容器是标准进程,因此可以使用内核特性来监控它们的执行——例如使用 strace 等工具来观察和调解系统调用。

我个人强行理解呢,Docker就是一个可以用标准化方法来安装软件的框架。和iPhone上的Apple app store、Android上的Google Play Store是类似的。如果你之前看过我的博文Linux基础 目录管理的个人实践,那么应该已经搭建过一个叫Ward的Docker应用。我觉得docker-compose这种方案就挺标准的,不费什么脑。

为什么是Docker?

迁移性好

某些情况,你很可能要迁移你的服务。比如VPS太小太弱了、主机硬盘坏了主板坏了、VPS小厂服务器着火了之类的。那么你所用平台的迁移性就比较重要了,这样你的互联网服务就可以随时跑路。

在迁移性方面,Docker是不错的选择。迁移宝塔面板的网站我自己还没有试过。我以前在NAS上用过宝塔面板搭建过Wordpress博客,不过443端口封禁后就没有再玩过,自己也没想过要迁移到VPS中。我用宝塔面板搭建chevereto图床倒是用了很长时间,毕竟markdown天天都在使用嘛!不过后面我了解了Docker之后,觉得Docker才是我正确的选择。

此外,Docker容器布署的过程中可以通过volume参数将容器内的目录映射到宿主机的物理目录中。Docker的Volume映射给互联网服务的备份带来很大便利。如果我想换一个好一点的VPS,我只要使用scp将整个Docker目录copy过去,再用docker-compose逐个上线互联网服务。甚至你可以简单地写一个shell脚本批量上线Docker服务!在上线期间,你再搞搞域名解析什么的,很快全部互联网服务就满血复活了。所以说,Docker切实地降低了维护互联网服务的时间成本呢!

显然,Linux+Docker是一种通用的方式,至少你不需要再专门去学习宝塔怎么用,对吧?只要掌握一点Linux基础,而相关的知识储备在本博客的Linux基础栏目已经详细地讨论过了。

当然,这里并不是要引起平台之争。“XXX就是yyds,XXX就是垃圾”并不是一种良好的学习态度。我们还是要开阔眼界,多多接触新鲜事物,客观地了解它们的优缺点。这样你才能真正确定自己想要什么。对于我个人而言,我已经弃用宝塔,转战Docker。毕竟,Docker容器的维护和迁移十分优雅而简洁

生态圈大

Docker的官方镜像托管在这里:https://hub.docker.com/

它有个自夸的描述:Docker Hub is the world’s largest library and community for container images. Browse over 100,000 container images from software vendors, open-source projects, and the community.

总之就是软件多,总有一款适合你嘛!

下面再放一个它们推荐的镜像:

image-20220421115354623

看到诸如Nginx、redis、mysql、python之类的应用,如果你有点懂,你就觉得这玩意确实不错呀 :joy: 这些镜像还有Official的字样,这就意味是服务商官方来维护这个镜像呢!是不是有IOS app那味了!

你甚至可以用Docker来安装一个Ubuntu :grinning:

就我的经验,和生活相关的所有功能在Docker中都已经有了成熟的Images。是不是很酷?

安全性可

Docker使用中可能会有一些安全隐患,比如Docker的root权限。详细信息大家可以看一下这篇文章:Docker 容器的 root 安全吗?。如果大家看不完,我截取一些片段,大家感受一下。

虽然Docker和宿主机的用户都是0:0,但是借助于Linux内核的Capabilities机制,Docker的root权限还是受到了一定的限制。如果不需要授予Docker容器足够的Capabilities,只需在运行 Docker 容器时设置--privileged=false

默认情况下,docker run 命令的 privileged 参数值为 false。一旦将privileged参数设为true,那么 Docker 容器的root 权限将得到大幅度的提升。此时,Docker容器的root用户将获得37项Capabilities能力。由于Docker容器与宿主机处于共享同一个内核操作系统的状态,因此,Docker容器将完全拥有内核的管理权限 。安全隐患,瞬间浮出水面。

我注意到,我们装的第一个Docker应用程序——antonyleons/ward,它需要设置privileged=true。在我使用过的Docker程序中,还有dreamacro/clashonething1/wxedge等需要设置privileged=true。它们多是控制系统网络或读取硬件核心数据之类的程序。特别是antonyleons/ward,它的使用人数还是比较少,不知道会不会有什么安全隐患,总之大家演示完后视情况保留或删除。我是觉得自己的VPS无所谓,可以测试一下。大家不要学我,哈哈 :smirk:

小结

总体来说,Docker对于个人用户确实是一个不错的选择。你不需要学习太多额外的东西;所有的布署流程都是标准化的,即通过docker-compose进行服务的一键布署、下线和更新。另外,如果你学习了Docker,以后就算转战其它平台,也有一个良好的基础了,到那个时候估计你也具备自己debug的能力了。

马上开始玩耍吧 :stuck_out_tongue_winking_eye:

版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。 如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租:留言板 | 博客VPS |

评论

  1. huangwb8
    iPhone Chrome 100.0.4896.85
    5月前
    2022-4-21 21:35:36

    希望以后多多介绍哦!

    • 博主
      huangwb8
      Windows Chrome 99.0.4844.51
      5月前
      2022-4-21 21:36:28

      OK,其实Docker蛮简单的~主要是介绍一些常用的 和生活相关的Docker应用吧!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇