docker - Canonical LXD 容器软件和 docker 容器软件之间的主要区别是什么?

标签 docker ubuntu lxd ubuntu-cloud

我安装了 docker,但 ubuntu 产品似乎是开源软件,并没有打破我的钱包做同样的事情,但 docker 似乎更兼容谷歌云?我不确定 LXD,但我将它安装在带有安装帮助指南的包管理器中,但我不确定部署或如何在 ubuntu 云与谷歌云上部署模型。我希望我能在某处找到图形关系。

最佳答案

主要区别在于 Docker 提供应用程序容器,而 LXD 提供系统容器。
应用程序容器是帮助您运行应用程序、网络服务或类似事物的容器。完成应用程序后,Docker 将终止。
使用 LXD,您可以创建与虚拟机非常相似的系统容器。系统容器是 Linux 发行版运行时,当您启动它时,您选择的 Linux 发行版正在启动。它会一直运行,直到您将其关闭。与 VM 不同,系统容器不运行自己的 Linux 内核。它重用了主机的 Linux 内核。即使您在 Ubuntu 主机上启动了 Fedora 系统容器,Fedora 系统容器也在 Ubuntu Linux 内核上运行(感谢 Linux 内核的稳定 API)。
下面是一个创建系统容器的例子,安装nginx ,然后访问 Web 服务器。如果要使用 Docker 执行此操作,则需要创建或查找一些 Dockerfile。由于您使用的是传统的 Linux 管理命令,因此您可以自由地测试您想要的任何命令。就像使用虚拟机一样。
在下文中,我使用 Ubuntu 20.04 创建了一个名为 mycontainer 的系统容器(支持所有主要的 Linux 发行版)。然后,我在系统容器中得到一个 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 地址。还有许多其他的东西,比虚拟机轻得多。

关于docker - Canonical LXD 容器软件和 docker 容器软件之间的主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65818957/

相关文章:

php - 我可以访问正在运行的NGINX容器实​​例的文件系统吗?

docker - Dockerfile RUN即使进行清理也会创建一个胖层

python - 我如何告诉 Aptana Studio 使用 Python virtualenv?

docker - 如何理解LXD和VM、Docker的区别?

mysql - 如何在 VDS (lxd/containers) 上运行 docker

MongoDB docker 容器 "Failed to unlink socket file"

java - Docker 中的简单 Java 应用程序 - 无法找到或加载主类

python - 键入 "PermissionError"以离开 Python 解释器时抛出 "exit()"

php - 接口(interface)黑白模块

docker - 操作系统容器与应用程序容器