尝试在VyOS上运行容器
首先
VyOS 是一种基于Linux的软件路由器,除了仅进行路由之外,它还具备丰富的功能,因此在构建个人或团队实验室时非常方便。
从个人角度来看,它是构建vSphere实验室时不可或缺的软件之一。
请参考以下文章,其中也简要介绍了相关内容。
在 VyOS 上使用常规的路由器功能已经非常方便,但实际上,您还可以使用 Podman 在 VyOS 上运行容器!而且,您可以通过熟悉的 VyOS 管理 CLI 命令,对设置进行永久化。
“哦?如果容器可以移动,那实际上什么都能移动了啊。” 因此,我对 VyOS 不仅仅是一个路由器的潜力有所感觉。
因此,这次我想要尝试使用 VyOS 的容器执行功能来玩一玩。
程序
你可以参考 VyOS 的官方文档,链接在这里。
总结;
我认为对于了解VyOS操作的人来说,看实际配置可能更快,就像往常一样。但是,就这次而言,仅执行此操作也有几个地方会遇到困难,所以我将包括这些地方在内进行说明。
container {
name <name> {
allow-host-networks
image <image>
}
}
container {
name nginx {
allow-host-networks
image docker.io/library/nginx:latest
}
}
(可选)登录 注册表
在某些情况下,我们可以选择不这样做,但以Docker Hub为例,如果存在速率限制,可能会因此受阻而无法拉取容器镜像。因此,我们最好提前登录。
虽然感觉不是特别合适,但好像必须使用sudo来执行podman命令。
sudo podman login [REGISTRY]
sudo podman login
Username: USERNAME
Password: PASSWORD
(可选)拉取容器镜像
先行提前拉取容器映像。
在容器启动时,会自动拉取,所以从这个意义上说是可选的,但正如前面所述,因为与注册表的认证和速率限制可能会导致麻烦,所以会仔细按步骤进行。
请注意,在操作容器映像的命令中,应在操作模式(在输入configure之前)下执行。
add container image <image>
add container image docker.io/library/nginx:latest
这次只是为了试一试,所以我使用了 Docker Hub 上提供的最新版 nginx 来运行。
另外,由于此命令在成功时不会有任何输出,因此确保是否成功获取,需要使用下面的命令进行确认。
show container image
$ show container image
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/nginx latest eea7b3dcba7e 2 weeks ago 191 MB
顺便提一句,如果要删除特定的容器,可以使用以下命令。
delete container image <image>
容器启动配置
如果能够达到这一步的话,大致上应该能够避免陷阱,所以现在开始进行容器启动的配置。
感觉上类似于进行Docker Compose的配置吧。
首先,我们将转入配置模式。
vyos@vyos:~$ configure
[edit]
vyos@vyos#
然后,选择要执行的容器映像。
set container name <name> image <image>
set container name nginx image docker.io/library/nginx:latest
这是原封不动的,但是””是执行时的容器名称,””是要执行的容器镜像。
然后,将有关容器网络的配置投入。
set container name <name> allow-host-networks
set container name nginx allow-host-networks
在中文中,这部分的含义是相当于podman run或docker run命令的–network host选项设置。我认为这是一个有争议的设置,但在这里为了简单起见,我们使用了这个选项。
如果使用show命令进行确认设置,并且设置已经按照预期投入,那就可以说“OK”。
vyos@vyos# show
+container {
+ name nginx {
+ allow-host-networks
+ image docker.io/library/nginx:latest
+ }
+}
...(略)...
启动容器
使用提交命令(commit)来应用配置后,容器将会启动。
vyos@vyos# commit
[edit]
vyos@vyos#
如果成功了,特别是没有输出的情况下,可以使用show命令来确认。
为了达到这个目的,需要回到操作模式(通过使用exit命令退出配置模式),请注意。
vyos@vyos# exit
Warning: configuration changes have not been saved.
exit
vyos@vyos:~$
确认容器启动的命令如下所示。
show container
vyos@vyos00:~$ show container
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4a8f1f854697 docker.io/library/nginx:latest nginx -g daemon o... 40 seconds ago Up 40 seconds ago nginx
确认操作
只要能够通过浏览器访问到VyOS的任何IP地址,并显示熟悉的“欢迎来到nginx!”,即表示成功。
(仅供参考) 桥接网络的使用
之前提到过,有人对于使用 –network host 这个选项有不同的意见。
那么,如果我们希望使用被普遍认为更好的 –network 来指定 bridge 网络的话,我们应该怎样设置呢?下面我将提供一个配置示例。
container {
name <name> {
image <image>
network <networkname> {
address <address>
}
port <portname> {
destination <portnumber>
protocol <tcp | udp>
source <portnumber>
}
}
network <networkname> {
prefix <prefix>
}
}
container {
name nginx {
image docker.io/library/nginx:latest
network internal {
address 172.20.0.2
}
port http {
destination 80
protocol tcp
source 8080
}
}
network internal {
prefix 172.20.0.0/16
}
}
在此配置示例中,当访问 VyOS 的任一 IP 地址+ 8080 端口时,应该会显示熟悉的 nginx 页面。
在设置部分,需要注意的地方是在这个附近。
bridge という名称はダメのようです。
システムで使われている名称らしく、エラーしました…
port の destination と source
podman run や docker run コマンドの –port destination:source オプションに相当します。
总结
方便得一言!
由于并没有涵盖 Podman 的全部设置,所以直接运行 Podman 似乎更方便易用一些。
话虽如此!然而,由于容器的可执行性,VyOS 上可以运行的应用程序范围大大扩展,因此我希望能够探索一些方便的用法!