我已经使用 Proxmox v4 设置了一个家庭服务器,并且想要运行一个 Docker 容器。我应该怎么做?我应该在 LXC 容器内设置 Docker 还是应该创建一个完整的 VM 并使用最小的操作系统之一,如 Atomic Host / CoreOS / RancherOS?
从这个问题的措辞中可以明显看出,我对容器和 Proxmox 都是新手,所以在回复时请记住这一点。这个家庭项目是我正在做的一件事来纠正这个问题。然而,我对 Linux 或虚拟化并不陌生。谢谢你的帮助!
多年来,我已经进行了一些 Docker 测试,但是对于特定类型的测试,我需要的不仅仅是应用程序容器。所以我转向 LXC/LXD 容器,这很棒。安装 LXD 后,我创建了自己的容器:
>> willem@ubuntu:/$ lxc launch images:centos/7/amd64 thing Creating thing
Starting thing
>> willem@ubuntu:/$ lxc list
+-------+---------+------------------+------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+-------+---------+------------------+------+------------+-----------+
| thing | RUNNING | 10.0.3.30 (eth0) | | PERSISTENT | 0 |
+-------+---------+------------------+------+------------+-----------+
Run Code Online (Sandbox Code Playgroud)
伟大的。只有我似乎对这里的 IP 地址没有任何控制权。我找到了(在 Google 的帮助下并找到了)一个控制文件:
>> root@ubuntu:/# locate lxc.conf
/etc/init/lxc.conf
..
/var/log/lxd/thing/lxc.conf
Run Code Online (Sandbox Code Playgroud)
您可以在其中放置(看起来像)静态 IP4 地址。只有在重新启动容器时,主机似乎忘记了我的静态 IP,并从 DHCP 中获取了一个。问题:
--ip
开关docker run
)?我正在尝试启动 LXC 容器,然后在其中运行命令。问题在于,即使容器处于 RUNNING 状态,它也没有完成所有的启动。这会给 /tmp 带来麻烦(我猜,还有其他初始化)。
这可以通过创建容器、启动容器、等待其 RUNNING 状态并执行一些命令的调用序列来说明;这些命令创建一个文件 /tmp/hello,显示一个目录,稍等一下,然后再次显示该目录:
lxc-clone -B overlayfs -s -o vm -n c1 ; lxc-start -n c1 ; lxc-wait -n c1 -s RUNNING ; lxc-attach -n c1 -- su -c "touch /tmp/hello; ls -la /tmp; sleep 5; ls -la /tmp" slave ; lxc-stop -n c1 ; lxc-destroy -n c1
其输出是
Created container c1 as snapshot of vm
total 16
drwxrwxrwt 1 root root 4096 May 24 09:37 .
drwxr-xr-x 1 root nogroup 4096 May …
我有一个 Ubuntu 16.04 工作站,带有 ext4 文件系统。
(注意:到目前为止,我遇到的 Btrfs 唯一与性能相关的主要警告是建议使用noatime
mount 标志。)
通常最好使用选项挂载 Btrfs
'nodatacow'
,禁用写时复制,因为当您进行大量随机写入时,COW 会导致碎片、磁盘抖动以及 CPU 和 RAM 峰值。
现在,这似乎是一个真正的阻尼器!
问:有什么方法可以让我同时拥有 Btrfs 的快速快照和高性能 MySQL 实例?
我正在使用 lxd 运行多个容器,但在报告内存使用情况时遇到问题: 和 都htop
显示free
高内存使用情况,但使用内存的进程列表非常短,并且不等于报告的使用情况。
从裸机来看,这就是 htop 显示的内容(按 排序%MEM
,用户态线程隐藏):
这是free -mh
:
total used free shared buff/cache available
Mem: 15G 8.2G 5.5G 576M 1.6G 5.4G
Swap: 9G 297M 9.7G
Run Code Online (Sandbox Code Playgroud)
从 htop 屏幕截图中,我预计使用的总内存约为 2G+(加上 RES 值),而不是 10G+。来自为什么“top”中的内存使用量没有相加?,报告的“实际使用”内存仍然约为 6.6G。
我是否遗漏了什么,显示的内存报告是否连贯?
我正在按照此处所述执行在lxc 容器内安装主机驱动器的过程。在那篇文章中,作者将raw.idmap设置为这样:
lxc config set zesty raw.idmap 'both 1000 1000'
Run Code Online (Sandbox Code Playgroud)
我想按照lxd idmap 文档中的描述自定义 gid 和 uid 的映射。其中显示了一个示例映射,如下所示:
both 1000 1000
uid 50-60 500-510
gid 10000-110000 10000-20000
Run Code Online (Sandbox Code Playgroud)
我正在为实际设置这个语法而苦苦挣扎,因为第一篇文章中的命令似乎不适用于多行配置,我已经尝试在一行中输入所有内容并使用 JSON,但没有运气,因为容器会出现配置错误并且无法启动。
配置它的正确方法是什么?
我们的生产容器崩溃了,因为它的 LXC 存储池空间不足。
这是dh -h
从容器内部:
Filesystem Size Used Avail Use% Mounted on
/dev/loop0 82G 78G 2.0G 98% /
Run Code Online (Sandbox Code Playgroud)
这是来自主机系统的相同挂载:
/dev/loop0 82G 78G 2.0G 98% /var/lib/lxd/storage-pools/default
Run Code Online (Sandbox Code Playgroud)
我记得一年前当我设置它时,它问我 80GB 是否适合听起来不熟悉的东西,并且因为它没有说“容器磁盘大小”并说其他的东西,我只是想我最好相信默认值选项。现在我知道这是磁盘空间限制。我现在怎样才能增加这个限制?
此刻,我只是紧急清理了一些空间。主机实际上有数 TB 的磁盘空间。
PS 很抱歉抱怨,但 LXC 的文档是我见过的最糟糕的文档之一。对于像我这样的用户来说,这没有意义。
PPS 我忘了我实际上使用 LXD,呵呵。我打字lxc
做任何事情的事实让我感到困惑。
更新: 直觉上,我认为这个命令可以调整存储池的大小:
# lxc storage set default size 200GB
Run Code Online (Sandbox Code Playgroud)
但它失败了:
Error: The [size] properties cannot be changed for "btrfs" storage pools
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?