问题描述
我已经安装了 docker,但 ubuntu 产品似乎是开源软件,并且不会破坏我的钱包来做同样的事情,但是 docker 似乎与谷歌云更兼容?我不确定 LXD,但我正在使用安装帮助指南将它安装在包管理器中,但我不确定部署或如何在 ubuntu 云与谷歌云上部署模型。我希望我能在某处找到图形关系。
解决方法
主要区别在于Docker提供应用容器,而LXD提供系统容器。
应用程序容器是帮助您运行应用程序、网络服务或类似内容的容器。完成应用程序后,Docker 将终止。
使用 LXD,您可以创建系统容器,这与虚拟机非常相似。系统容器是 Linux 发行版运行时,当您启动它时,您选择的 Linux 发行版正在启动。它会一直运行,直到您将其关闭。与 VM 不同,系统容器不运行自己的 Linux 内核;它重用了主机的 Linux 内核。即使您在 Ubuntu 主机上启动 Fedora 系统容器,Fedora 系统容器也会在 Ubuntu Linux 内核上运行(感谢 Linux 内核的稳定 API)。
以下是创建系统容器、安装nginx
,然后访问网络服务器的示例。如果要使用 Docker 执行此操作,则需要创建或查找一些 Dockerfile。由于您使用的是传统的 Linux 管理命令,因此您可以自由地测试您想要的任何命令。就像使用虚拟机一样。
在下文中,我使用 Ubuntu 20.04(支持所有主要 Linux 发行版)创建了一个名为 mycontainer 的系统容器。然后,我在系统容器中获取一个 shell 并更新包列表。随后,我安装了 nginx
。我从容器中注销并检查容器的 IP 地址。最后,我从主机访问该网站。如果我在主机上运行 Firefox,我可以从 Firefox 访问 Web 服务器。
$ lxc launch ubuntu:20.04 mycontainer
Creating mycontainer
Starting mycontainer
$ lxc shell mycontainer
root@mycontainer:~# apt update && apt install -y nginx
...
root@mycontainer:~# lsof -i :www
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
nginx 1470 root 6u IPv4 297609 TCP *:http (LISTEN)
nginx 1470 root 7u IPv6 297610 TCP *:http (LISTEN)
nginx 1471 www-data 6u IPv4 297609 TCP *:http (LISTEN)
nginx 1471 www-data 7u IPv6 297610 TCP *:http (LISTEN)
nginx 1472 www-data 6u IPv4 297609 TCP *:http (LISTEN)
nginx 1472 www-data 7u IPv6 297610 TCP *:http (LISTEN)
nginx 1473 www-data 6u IPv4 297609 TCP *:http (LISTEN)
nginx 1473 www-data 7u IPv6 297610 TCP *:http (LISTEN)
nginx 1474 www-data 6u IPv4 297609 TCP *:http (LISTEN)
nginx 1474 www-data 7u IPv6 297610 TCP *:http (LISTEN)
root@mycontainer:~# logout
$ lxc list mycontainer
+-------------+---------+--------------------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------------+---------+--------------------+------+-----------+-----------+
| mycontainer | RUNNING | 10.10.10.92 (eth0) | | CONTAINER | 0 |
+-------------+---------+--------------------+------+-----------+-----------+
$ curl 10.10.10.92
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
...
$ lxc stop mycontainer
$ lxc delete mycontainer
就像使用虚拟机一样,您也可以通过系统容器从 LAN 获取 IP 地址。还有许多其他东西,比虚拟机轻得多。