1. podman -- 容器
容器(LXC,Linux Container)
1. 为什么要使用容器
假设您在开发一个应用。
您使用的是一台笔记本电脑,且您的开发环境具有特定的配置,您正在开发的应用不止依赖于您当前的配置,还需要某些特定的库、依赖项和文件。
其他开发人员的环境配置可能稍有不同,与此同时,您的企业还拥有标准化的开发和生产环境,有着自己的配置和一系列支持文件。
您希望尽可能多在本地模拟这些环境,而 不是花费精力来重新创建环境。
要如何确保应用能够在这些环境中运行,答案就是使用容器。
容器可以确保您的应用拥有必需的库、依赖项和文件,
(可以将自己的开发环境、代码、配置、文件等一并打包到容器中,)
让您可以在生产中自如地迁移这些应用,无需担心会出现任何负面影响。
实际上,可以将容器的内容,视为 Linux 发行版的一个安装实例,(类比一个虚拟机)
因为其中完整包含 RPM 软件包、配置文件等内容。
但是,安装容器,要比安装新的操作系统副本容易得多。
比如,用 Python 开发网站后台后,
就可以将 Python3 及其依赖包、用到的 Flask 及其各种插件、Mysql、Nginx 等打包到一个容器中,
然后部署到任意你想部署到的环境,只要有容器运行的环境即可。
由此:
- 可移植性(不依赖于语言、框架、系统)
容器是与系统其他部分隔离开 的一系列进程。
运行这些进程所需的所有文件都由另一个镜像提供,
这意味着将容器移动到其他的环境,
(如:ARM Linux 系统运行 ARM Linux 容器,x86 Linux 系统运行 x86 Linux 容器,x86 Windows 系统运行 x86 Windows 容器)
依旧能正常的运行。
Linux 容器具有极佳的可移植性,但前提是它们必须与底层系统兼容。
2. 容器和集装箱
container 的中文释义之一就是集装箱,
且在此,中文翻译为集装箱比翻译为容器会更加贴切。
如下图,就是 docker(容器技术的一种实现)的 logo
集装箱 将 一辆车 打包好,从 A 码头 运送到 B 码头, 到达目的地卸货后,车正常的开动。
容器 将 开发的程序和依赖环境 打包好,从 CentOS 7 移植到 Ubuntu 14, 移植后,程序正常的运行。
3. 容器和虚拟化
...将开发的东西、依赖关系打包到容器中...将容器镜像中的内容,视为 Linux 发行版的一个安装实例,
虚拟化
- 虚拟化是使得多个操作系统(Windows、Linux)可以在单一主机上运行
- 虚拟化通过 Hypervisor 将硬件“拆分”(uses a hypervisor to emulate hardware)成多个虚拟硬件,允许多个操作系统并行运行
容器
- 容器是直接运行于操作系统(分享硬件、操作系统资源),共享同一个内核
- 作系统将容器与其他系统部分进行了隔离
- 相比较,容器更加“轻量级”,占用资源更少
4. OCI
- Image
- Distribution
- Runtime