Docker系列 学习Docker之前

26 篇文章 2 订阅

前言

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

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

什么是Docker?

我直接粘贴wiki上的原话哈

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之类的应用,如果你有点懂,你就觉得这玩意确实不错呀 😂 这些镜像还有Official的字样,这就意味是服务商官方来维护这个镜像呢!是不是有IOS app那味了!

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

就我的经验,和生活相关的所有功能在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无所谓,可以测试一下。大家不要学我,哈哈 😏

小结

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

马上开始玩耍吧 😜

转至个人博客:https://blognas.hwb0307.com
欢迎关注!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值