容器管理工具:
目前主要是使用 docker, 早期有使用 lxc。
LXC
LXC: LXC 为 Linux Container 的简写。可以提供轻量级的虚拟化,以便隔离进程和资源, 官方网站: https://linuxcontainers.org/
- Ubuntu 安装 lxc:
# apt install lxc lxd
Reading package lists... Done
Building dependency tree
Reading state information... Done
lxd is already the newest version (3.0.3-0ubuntu1~18.04.3).
lxc is already the newest version (3.0.3-0ubuntu1~18.04.1).
- 检查内核对 lcx 的支持状况,必须全部为 lcx
# lxc-checkconfig
# lxc-create -t 模板名称 -n lcx-test
# lxc-create -t download --name alpine12 -- --dist alpine --release 3.9 --arch amd64
Setting up the GPG keyring
Downloading the image index
Downloading the rootfs
Downloading the metadata
The image cache is now ready
Unpacking the rootfs
---
You just created an Alpinelinux 3.9 x86_64 (20190630_13:00) container.
命令备注:
-t 模板: -t 选项后面跟的是模板,模式可以认为是一个原型,用来说明我们需要一个什么样的容器(比如容器里面需不需要有 vim, apache 等软件).模板实际上就是一个脚本文件(位于/usr/share/lxc/templates 目录),我们这里指定 download 模板(lxc-create 会调用 lxcdownload 脚本,该脚本位于刚说的模板目录中)是说明我们目前没有自己模板,需要下载官方的模板
–name 容器名称: 为创建的容器命名
– : --用来说明后面的参数是传递给 download 脚本的,告诉脚本需要下载什么样的模板
–dist 操作系统名称:指定操作系统
–release 操作系统: 指定操作系统,可以是各种 Linux 的变种
–arch 架构: 指定架构,是 x86 还是 arm,是 32 位还是 64 位
- 启动 lxc 容器
# lxc-start alpine12
- 进入 lxc 容器
# lxc-attach alpine12
容器内查看网络
~ # ifconfig
eth0 Link encap:Ethernet HWaddr 00:16:3E:DF:54:94
inet addr:10.0.3.115 Bcast:10.0.3.255 Mask:255.255.255.0
inet6 addr: fe80::216:3eff:fedf:5494/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:18 errors:0 dropped:0 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2102 (2.0 KiB) TX bytes:1796 (1.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
容器内查看内核
~ # uname -a
Linux alpine12 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018
x86_64 Linux
lxc 启动容器依赖于模板, 清华模板源:https://mirrors.tuna.tsinghua.edu.cn/help/lxc-images/
但是做模板相对较难, 需要手动一步步创构建文件系统、准备基础目录及可执行程序等,而且在大规模使用容器的场景很难横向扩展, 另外后期代码升级也需要重新从头构建模板,基于以上种种原因便有了 docker。
docker:
Docker 启动一个容器也需要一个外部模板但是较多镜像, docke 的镜像可以保存在一个公共的地方共享使用, 只要把镜像下载下来就可以使用,最主要的是可以在镜像基础之上做自定义配置并且可以再把其提交为一个镜像,一个镜像可以被启动为多个容器。
Docker 的镜像是分层的, 镜像底层为库文件且只读层即不能写入也不能删除数据,从镜像加载启动为一个容器后会生成一个可写层,其写入的数据会复制到容器目录, 但是容器内的数据在删除容器后也会被随之删除。
pouch:
https://www.infoq.cn/article/alibaba-pouch
https://github.com/alibaba/pouch
Docker 的优势:
快速部署: 短时间内可以部署成百上千个应用,更快速交付到线上。高效虚拟化:不需要额外的 hypervisor 支持,直接基于 linux 实现应用虚拟化,相比虚拟机大幅提高性能和效率。
节省开支: 提高服务器利用率,降低 IT 支出。
简化配置: 将运行环境打包保存至容器,使用时直接启动即可。快速迁移和扩展: 可夸平台运行在物理机、虚拟机、公有云等环境, 良好的兼容性可以方便将应用从 A 宿主机迁移到 B 宿主机, 甚至是 A 平台迁移到 B 平台。
Docker 的缺点:
隔离性: 各应用之间的隔离不如虚拟机彻底