Skip to content

一、基本概念

1、Docker架构

image-20210628114723041

K8S:CRI(Container Runtime Interface)

Client: 客户端;操作docker服务器的客户端(命令行或者界面)

Docker_Host:Docker主机;安装Docker服务的主机

Docker_Daemon:后台进程;运行在Docker服务器的后台进程

Containers:容器;在Docker服务器中的容器(一个容器一般是一个应用实例,容器间互相隔离)

Images:镜像、映像、程序包;Image是只读模板,其中包含创建Docker容器的说明。容器是由Image运

行而来,Image固定不变。

Registries:仓库;存储Docker Image的地方。官方远程仓库地址: https://hub.docker.com/search

Docker用Go编程语言编写,并利用Linux内核的多种功能来交付其功能。 Docker使用一种称为名称

空间的技术来提供容器的隔离工作区。 运行容器时,Docker会为该容器创建一组名称空间。 这些

名称空间提供了一层隔离。 容器的每个方面都在单独的名称空间中运行,并且对其的访问仅限于

该名称空间。

Docker面向对象
镜像(Image)
容器(Container)对象(实例)

容器与虚拟机

image-20210628114739120

2、Docker隔离原理

  • namespace 6 项隔离 (资源隔离)
namespace系统调用参数隔离内容
UTSCLONE_NEWUTS主机和域名
IPCCLONE_NEWIPC信号量、消息队列和共享内存
PIDCLONE_NEWPID进程编号
NetworkCLONE_NEWNET网络设备、网络栈、端口等
MountCLONE_NEWNS挂载点(文件系统)
UserCLONE_NEWUSER用户和用户组
  • cgroups 资源限制 (资源限制)

cgroup提供的主要功能如下:

    • 资源限制:限制任务使用的资源总额,并在超过这个 配额 时发出提示
    • 优先级分配:分配CPU时间片数量及磁盘IO带宽大小、控制任务运行的优先级
    • 资源统计:统计系统资源使用量,如CPU使用时长、内存用量等
    • 任务控制:对任务执行挂起、恢复等操作

cgroup资源控制系统,每种子系统独立地控制一种资源。功能如下

子系统功能
cpu使用调度程序控制任务对CPU的使用
cpuacct(CPU Accounting)自动生成cgroup中任务对CPU资源使用情况的报告
cpuset为cgroup中的任务分配独立的CPU(多处理器系统时)和内存
devices开启或关闭cgroup中任务对设备的访问
freezer挂起或恢复cgroup中的任务
memory设定cgroup中任务对内存使用量的限定,并生成这些任务对内存资源使用情况的报告
perf_event(Linux CPU性能探测器)使cgroup中的任务可以进行统一的性能测试
net_cls(Docker未使用)通过等级识别符标记网络数据包,从而允许Linux流量监控程序(Tra?icController)识别从具体cgroup中生成的数据包

3、Docker 如何工作?

​ Docker 技术使用 Linux 内核和内核功能(例如 Cgroups 和 namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用程序,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。

​ 容器工具(包括 Docker)可提供基于镜像的部署模式。这使得它能够轻松跨多种环境,与其依赖程序共享应用或服务组。Docker 还可在这一容器环境中自动部署应用程序(或者合并多种流程,以构建单个应用程序)。

4、Docker安装

以下以centos为例;

更多其他安装方式,详细参照文档: https://docs.docker.com/engine/install/centos/

1、移除旧版本

sh
sudo yum remove docker*

2、设置docker yum源

sh
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装最新docker engine (可不安装)

sh
# sudo yum install docker-ce docker-ce-cli containerd.io

4、安装指定版本docker engine

1、在线安装

sh
#找到所有可用docker版本列表
yum list docker-ce --showduplicates | sort -r
# 安装指定版本,用上面的版本号替换<VERSION_STRING>
#sudo yum install docker-ce-<VERSION_STRING>.x86_64 docker-ce-cli-<VERSION_STRING>.x86_64 containerd.io
#例如
yum install -y docker-ce-19.03.9  docker-ce-cli-19.03.9 containerd.io

2、离线安装

sh
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
rpm -ivh xxx.rpm
可以下载 tar
解压启动即可
https://docs.docker.com/engine/install/binaries/#install-daemon-and-client-binaries-on-linux

5、启动服务

sh
# 启动
systemctl start docker

# 开机自启
systemctl enable docker

6、镜像加速

sh
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://c9jwzg2k.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 阿里云的镜像是从docker hub来的,我们配置了加速,默认是从阿里云(缓存)下载
# 以后docker下载直接从阿里云拉取相关镜像
#/etc/docker/daemon.json 是Docker的核心配置文件。

{
    "registry-mirrors": [
        "https://mirror.ccs.tencentyun.com"
    ]
}

5、Docker镜像生命周期

image-20211104103406528