在本教程中,您将学习如何在一个“pod”中运行两个容器以托管WordPress站点。无论您是将其作为工作的一部分、未来的工作机会,还是只是出于对新技术的兴趣,容器对于许多人甚至是经验丰富的系统管理员来说都是难以抗拒的。那么如何真正开始使用容器呢?从容器到Kubernetes的成长路径是什么?另外,为什么有不止一条路径?正如您所料,最好的起点就是现在。1.了解容器简单回顾一下,容器的起源可以追溯到早期的BSD及其特殊的chroot监狱,但让我们直接跳到开发的中期。此前,Linux内核引入了“控制组cgroups”,允许您使用“名称空间命名空间”来“标记”进程。当您将进程分组到命名空间中时,进程的行为就好像命名空间之外不存在任何东西,就像您将进程放入某种容器中一样。当然,这种容器是虚拟的,它位于计算机内部,它与操作系统的其他进程使用相同的核心、内存和CPU,但你使用容器来包含这些进程。分发预构建的容器,其中仅包含运行其包含的应用程序所需的内容。使用Podman、Docker或CRI-O等容器引擎,您可以运行容器化应用程序,而无需传统意义上的安装。容器引擎通常是跨平台的,因此即使容器运行在Linux上,您也可以在其他Linux、MacOS或Windows上启动容器。更重要的是,当需求很高时,您可以运行同一个应用程序的多个容器。既然您知道什么是容器,下一步就是运行一个容器。2.运行一个容器在运行一个容器之前,你应该有一个想要运行它的理由。您可以制作一个,这有助于您对容器创建过程产生兴趣,从而激发您实际使用正在运行的容器的灵感。毕竟,在不使用容器提供的应用程序的情况下运行容器只是证明您没有注意到任何故障,但使用容器证明它可以工作。我建议从WordPress开始,它是一个流行的Web应用程序,易于使用,因此一旦容器启动并运行,您就可以对其进行测试。虽然您可以轻松配置WordPress容器,但有许多配置选项可以引导您发现更多运行容器的方法(例如运行数据库容器)以及容器之间的通信方式。我使用Podman,这是一个友好、方便、无守护进程的容器引擎。如果您没有安装Podman,则可以改用Docker命令。它们都是很棒的开源容器引擎,并且它们的语法相同(只需键入docker而不是podman)。因为Podman没有守护进程,所以需要更多的配置,但是为了能够运行无根、无守护进程的容器,这是值得的。如果你使用Docker,你可以跳到下面的运行WordPress容器部分,否则,打开一个终端来安装和配置Podman:$sudodnfinstallpodmanContainersspawnmanyprocesses,usuallyonlytherootuserhaspermissiontocreatethousandsofprocessIDs.创建一个名为/etc/subuid的文件,定义一个合适的起始UID和大量合法的PID,以便可以为您添加一些额外的进程ID:seth:200000:165536在一个名为/etc/subgid的文件中对你的小组在.在此示例中,我的主要组是员工(对您来说可能是用户,或者与您的用户名相同,具体取决于您的系统)。staff:200000:165536最后,确保您的用户可以管理多个名称空间:$sysctl--all--patternuser_namespacesuser.max_user_namespaces=28633如果您的用户没有权限管理超过28,000个名称空间,请创建/etc/sysctl。d/userns.conf文件以增加数量并输入:user.max_user_namespaces=28633运行WordPress容器现在,无论您使用的是Podman还是Docker,都可以从在线容器存储库下载WordPress容器并运行它。您可以使用以下Podman命令执行所有这些操作:$podmanrun--namemypress\-p8080:80-dwordpress给Podman一点时间找到容器,从互联网下载它,然后启动它。收到终端返回提示后,启动网络浏览器并打开localhost:8080。WordPress正在运行并等待您进行设置。WordPress容器不过,您很快就会遇到麻烦,因为WordPress使用数据库来存储数据,因此您需要为其提供数据库。在继续之前,停止并删除WordPress容器:$podmanstopmypress$podmanrmmypress3.在Pods中运行容器顾名思义,容器在设计上是自包含的。在容器中运行的应用程序不应与容器外的应用程序或基础设施交互。所以当一个容器需要另一个容器运行时,一种解决方案是将这两个容器放在一个更大的容器中,称为“podpod”。Pod确保它们的容器可以共享重要的命名空间以相互通信。创建一个新的pod,给它一个名字,以及你希望能够访问的端口:$podmanpodcreate\--namewp_pod\--publish8080:80确认pod存在:$podmanpodlistPODIDNAMESTATUSINFRAID#OFCONTAINERS100e138a29bdwp_podCreated22ace92df3ef1将容器添加到pod现在您已经为相互依赖的容器创建了pod,您可以通过指定要运行的pod来启动每个容器。首先,启动一个数据库容器。您可以创建自己的凭据,只需在WordPress连接到数据库时使用相同的凭据即可。$podmanrun--detach\--podwp_pod\--restart=always\-eMYSQL_ROOT_PASSWORD="badpassword0"\-eMYSQL_DATABASE="wp_db"\-eMYSQL_USER="tux"\-eMYSQL_PASSWORD="badpassword1"\--name=wp_dbmariadb接下来,在同一个pod中启动WordPress容器:\-eWORDPRESS_DB_PASSWORD="badpassword1"\-eWORDPRESS_DB_HOST="127.0.0.1"\--namemypresswordpress现在启动您最喜欢的网络浏览器并打开localhost:8080。这次,设置将正常进行。WordPress将连接到数据库,因为您在启动容器时传递了这些环境变量。WordPress启动并创建用户帐户后,您可以登录以查看WordPress仪表板。在容器中运行的WordPress仪表板在下一步中,您创建了两个容器并在pod中运行它们。您现在知道如何在自己的服务器上运行容器和服务了。如果您想迁移到云端,容器适合您。使用Kubernetes和OpenShift等工具,您可以自动启动集群上的容器和pod。如果您正在考虑采取下一步行动,请阅读KevinCasey的3种开始使用Kubernetes的方法并尝试他提到的Minikube教程。
