介绍

Container 即容器,平时生活中指的是可以装下其它物品的工具, 以方便人类归纳放置物品 、存储和异地运输 ,比如人类使用的衣柜 、行李箱、 背包等可以成为容器,Container 除了容器以外,另一个意思是集装箱, 很多码头工人将很多装有不同物品但却整齐划一的箱子装载到停靠在岸边大船,然后方便的运来运去。
虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的。实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了。下面的一串名称可能有的你都没有听说过,但它们的确都是容器技术的应用:

  • 1、Chroot Jail
    就是我们常见的 chroot 命令的用法。它在 1979 年的时候就出现了,被认为是最早的容器化技术之一。它可以把一个进程的文件系统隔离起来。
  • 2、The FreeBSD Jail
    Freebsd Jail (监狱)实现了操作系统级别的虚拟化,它是操作系统级别虚拟化技术的先驱之一。2000年,伴随FreeBSD4.0版的发布
  • 3、Linux VServer
    使用添加到 Linux 内核的系统级别的虚拟化功能实现的专用虚拟服务器。允许创建许多独立的虚拟专用服务器(VPS),这些虚拟专用服务器在单个物理服务器上全速同时运行,从而有效地共享硬件资源。
    VPS提供与传统Linux服务器几乎相同的操作环境。可以在这样的VPS上启动所有服务(例如ssh,邮件,Web和数据库服务器),而无需(或者在特殊情况下只需进行很少的修改),就像在任何真实服务器上一样。每个VPS都有自己的用户帐户数据库和root密码,并且与其他虚拟服务器隔离,但它们共享相同的硬件资源。2003年11月1日 VServer 1.0 发布官网:http://linux-vserver.org/
    4、Solaris Containers
    它也是操作系统级别的虚拟化技术,专为 X86 和 SPARC 系统设计。Solaris 容器是系统资源控制和通过”区域” 提供边界隔离的组合。
    5、OpenVZ
    OpenVZ 是一种 Linux 中操作系统级别的虚拟化技术。 它允许创建多个安全隔离的 Linux 容器,即VPS。
    6、Process Containers
    Process 容器由 Google 的工程师开发,一般被称为 cgroups。
    7、LXC
    LXC为Linux Container的简写。可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求
    Linux Container提供了在单一可控主机节点上支持多个相互隔离的server container同时执行的机制。
    Linux Container有点像chroot,提供了一个拥有自己进程和网络空间的虚拟环境,但又有别于虚拟机,
    因为lxc是一种操作系统层次上的资源的虚拟化。
    8、Warden
    在最初阶段,Warden 使用 LXC 作为容器运行时。 如今已被 CloudFoundy 取代。
    9、LMCTFY
    LMCTY 是 Let me contain that for you 的缩写。它是 Google 的容器技术栈的开源版本。Google 的工程师一直在与 docker 的 libertainer 团队合作,并将 libertainer 的核心概念进行抽象并移植到此项目中。该项目的进展不明,估计会被 libcontainer 取代。
    10、Docker
    Docker 是一个可以将应用程序及其依赖打包到几乎可以在任何服务器上运行的容器的工具。
    11、RKT
    RKT 是 Rocket 的缩写,它是一个专注于安全和开放标准的应用程序容器引擎。
    综上所述正如我们所看到的,docker 并不是第一个容器化技术,但它的确是最知名的一个。

Docker 安装及基础命令介绍

Docker 目前已经支持多种操作系统的安装运行,比如Ubuntu、CentOS、Redhat、Debian、Fedora,甚至是还支持了Mac和Windows,在linux系统上需要内核版本在3.10或以上

源安装

Debian系

1
apt update && apt install docker.io -y

RHEL系列好像默认不带docker仓库,安装podman其实相差无几

1
dnf install podman -y

官方源仓库安装

Debian系

1
2
3
4
5
6
7
8
#安装必要工具
apt update && apt install -y ca-certificates curl gnupg apt-transport-https softwareproperties-common
#安装GPG证书
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
#添加源仓
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/dockerce/linux/ubuntu $(lsb_release -cs) stable"
#sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/dockerce/linux/debian $(lsb_release -cs) stable"
apt update && apt install

RHEL系列好像默认不带docker仓库,安装podman其实相差无几

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#centos
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#移除docker所有组件
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#添加仓库
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#实际上安装docker-ce即可安装所有组件
#rhel
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

离线安装

离线安装,注意,centos关闭selinux,否则docker无法执行文件
官网 https://download.docker.com/linux/static/stable/x86_64/
清华源 https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
wget https://download.docker.com/linux/static/stable/x86_64/docker-[VERSION].tgz
tar xf docker-VERSION.tgz
cp -a docker/* /usr/bin
cat > /lib/systemd/system/docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issuesstill
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP \$MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of dockercontainers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now docker

官方脚本安装

如报错请更新

1
2
#apt update  -y | yum update -y
sh <(curl -fsSL https://get.docker.com)

常用命令合集

镜像操作

1
docker 

容器操作