前言
经过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.
总之就是软件多,总有一款适合你嘛!
下面再放一个它们推荐的镜像:
看到诸如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/clash
、onething1/wxedge
等需要设置privileged=true
。它们多是控制系统网络或读取硬件核心数据之类的程序。特别是antonyleons/ward
,它的使用人数还是比较少,不知道会不会有什么安全隐患,总之大家演示完后视情况保留或删除。我是觉得自己的VPS无所谓,可以测试一下。大家不要学我,哈哈 :smirk:
小结
总体来说,Docker对于个人用户确实是一个不错的选择。你不需要学习太多额外的东西;所有的布署流程都是标准化的,即通过docker-compose进行服务的一键布署、下线和更新。另外,如果你学习了Docker,以后就算转战其它平台,也有一个良好的基础了,到那个时候估计你也具备自己debug的能力了。
马上开始玩耍吧 :stuck_out_tongue_winking_eye:
---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍
希望以后多多介绍哦!
OK,其实Docker蛮简单的~主要是介绍一些常用的 和生活相关的Docker应用吧!