十二毫升的爱丽丝 - 容器
type: channel
link: https://blog.sandtears.com/tag/%E5%AE%B9%E5%99%A8/
items: OpenVZ7下安装Docker容器
items: 命令行下创建NAT LXC容器

OpenVZ7下安装Docker容器
type: item
date: 2018-09-07T12:00:00+00:00
description: OpenVZ6: https://wiki.openvz.org/Docker_inside_CT OpenVZ7: https://wiki.openvz.org/Docker_inside_CT_vz7 Docker是一种近年来流行的容器技术，可以快速的部署服务，免去配置运行环境的烦恼。但是可惜的是，Docker对Linux系统高版本的内核特性有一定的依赖，尽管官方在较新的OpenVZ6中提供了对Docker的支持，但是一方面这种支持仅限于较老版本的Docker(<=1.10)，且存在一定的兼容性问题；另一方面许多VPS服务提供商出于稳定性考虑并不愿意升级系统版本或为用户配置Docker支持。 但是在OpenVZ7中，官方对Docker提供了完整支持（虽然目前仍然是实验性特性，建议不要用于生产环境中），只需要挂载veth和overlay这两个内核模块即可。之后在OpenVZ虚拟机中，可以直接按照Docker官方提供的安装脚本或安装指南进行安装和部署。 另外作为Bonus，在开启了这两个模块支持后，OpenVZ虚拟机中也可以利用lxc来进行再次虚拟化。 常见问题： 如果在使用脚本或按照只能安装Docker时提示Docker运行失败，可能是宿主机未进行响应设置，可以通过工单的方式和服务提供商沟通要求添加Docker支持。

命令行下创建NAT LXC容器
type: item
date: 2018-06-22T07:22:00+00:00
description: LXC 是 Linux Container 的缩写，类似虚拟化技术中的 OpenVZ，是一种半虚拟化技术，可以提供一个和宿主机相对隔绝的沙盒环境。在容器中安装的各种软件不会影响到宿主机，同时也可以通过配置容器的资源限制，来保证容器中运行的软件不会占用过多资源。 前言 LXC 的安装 网络配置 宿主机的网络配置 为容器配置NAT网络 创建容器 配置容器 限制容器的 CPU 和内存占用 限制容器的磁盘大小 通过 iptables 进行端口转发 LXC 常用命令 一个用于创建 LXC 容器的 Python 脚本 前言 与 Docker 不同，LXC 和 OpenVZ 会保留用户操作的状态，而 Docker 则是提供一个无状态的预部署的容器，只有映射出来的文件才会得到保存。 许多优秀的管理面板提供了管理 LXC/OpenVZ 容器的功能，比如 Proxmox 等，但是由于管理面板的内存占用较高（纯净的 Debian9.4 镜像安装 Proxmox 后占用约 660MB 的内存），不适合小内存的机器，因此我选择 lxc 提供的使用命令行工具来对容器进行管理。 本文将主要包括如下内容： 创建 LXC 容器 限制 LXC 容器可用的资源（CPU，内存，磁盘等） 配置 LXC 容器的网络，且为 LXC 容器提供端口映射。 本文介绍的内容主要适用于如下两种情况： 内存较小的机器上无面板使用 lxc 虚拟化以节省内存消耗 面板出现 bug 时使用命令行工具排查错误 注：本文根据 Debian9.4 环境撰写，其余发行版那请自行调整相关命令。 LXC 的安装 对于比较新的 Debian 系统来说，安装 lxc 就是一句话 apt install lxc 网络配置 宿主机的网络配置 首先对宿主机进行网络配置，配置的目标是创建一个网桥及相关的 iptables 命令，实现 NAT 功能。 首先配置网桥，需要在网络配置文件（/etc/network/interfaces）中添加如下内容即可 重要：记得检查你的网络接口是否为eth0，如果不是则需要修改配置文件的最后两行。 auto vmbr0 iface vmbr0 inet static address 192.168.45.1 netmask 255.255.255.0 bridge_ports none bridge_stp off bridge_fd 0 post-up echo 1 > /proc/sys/net/ipv4/ip_forward post-up iptables -t nat -A POSTROUTING -s '192.168.45.0/24' -o eth0 -j MASQUERADE post-down iptables -t nat -D POSTROUTING -s '192.168.45.0/24' -o eth0 -j MASQUERADE 其次配置 /etc/default/lxc-net 文件（没有的话创建一个）。 USE_LXC_BRIDGE="true" LXC_BRIDGE="vmbr0" LXC_ADDR="192.168.45.1" LXC_NETMASK="255.255.255.0" LXC_NETWORK="192.168.45.0/24" LXC_DHCP_RANGE="192.168.45.150,192.168.45.200" LXC_DHCP_MAX="51" LXC_DHCP_CONFILE="" LXC_DOMAIN="" 重启lxc-net及网络服务。 systemctl restart lxc-net.service systemctl restart networking.service reboot # 或者直接重启系统 为容器配置NAT网络 首先修改配置文件让容器通过刚才创建的 NAT 网络连接互联网。 如果准备让所有的容器都使用该网络配置，可以修改默认的配置文件 /etc/lxc/default.conf，如果只打算修改个别容器的配置，可以在 /var/lib/lxc/<容器名>/config 找到个别容器的配置文件。 ## Network lxc.network.type = veth lxc.network.flags = up lxc.network.link = vmbr0 ## xx代表随机生成，每次重启都会有所变化 lxc.network.hwaddr = 00:16:3e:xx:xx:xx # 如果个别容器，可以指定 IP 地址及网关 lxc.network.ipv4 = 192.168.45.101/24 lxc.network.ipv4.gateway = 192.168.45.1 另外需要注意的是，部分…