尝试在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 上可以运行的应用程序范围大大扩展,因此我希望能够探索一些方便的用法!

广告
将在 10 秒后关闭
bannerAds