INDEX

  • §1 Docker 是什么
  • §2 架构
  • §2.1 官网图
  • §2.2 架构图
  • §2.3 UnionFS(联合文件系统)
  • §3 安装
  • §3.1 前提
  • §3.2 安装
  • §3.3 启动
  • §3.4 卸载
  • §4 镜像加速器


§1 Docker 是什么

  • docker 是环境的容器
  • 允许应用连同它的依赖、环境等一起打包,并且可以将这个包放到其他环境上继续启动运行
  • 类似以前 windows 的 ghost 镜像,但这个镜像是专为跑应用而准备的,所以自带这个应用所需的环境、配置、依赖

与虚拟机的区别如下图所示,相比于

  • docker 不需要虚拟硬件和操作系统,而是直接使用硬件资源
  • docker 是应用和环境的打包,虚拟机还需要加上一个虚拟操作系统内核

§2 架构

§2.1 官网图

docker ros 软路由_docker


镜像、容器实例、仓库

仓库 类似于 github,是存放镜像的地方

仓库和 maven 仓库一样有公有和私有仓库之分

最大的公有仓库是 hub.docker.com

国内最常用的仓库是阿里云

仓库里存放的都是镜像

镜像 是对应用和其依赖、环境等配属物的容器
镜像相当于一个模板,这个模板是一个文件
镜像通常可以包含一个完整的文件系统
镜像可以分层构建,并且不包含任何动态数据

容器实例 是镜像的一个运行进程
镜像运行后得到一个容器实例,所有容器都是通过镜像创建的
一个镜像可以同时运行处多个容器实例

§2.2 架构图

docker ros 软路由_docker ros 软路由_02


rootfs

是一套精简的 linux 文件系统,docker 镜像的运行也是基于 linux 的,只不过是基于简化版 linux

docker container
docker 容器

libcontainer(?)
docker 的 rootfs 只是一套精简的 linux 文件系统,若容器需要linux的一些特性则通常需要依赖 libcontainer
docker 通过 libcontainer 从 rootfs 上区分出不同的容器

docker registry
docker 仓库

docker client
docker 客户端,通常用来发出指令

docker daemon
docker 的守护进程,运行在主机上
包括两个部分

  • docker server
    用于接受客户端的指令并进行 job 的调用
  • docker engine
    用于实际处理 docker job 的地方,若 job 执行过程中需要,会自动与仓库进行通信

docker driver
驱动,包括网络驱动、图形驱动等

§2.3 UnionFS(联合文件系统)

docker 镜像的文件系统是分层的,在下载镜像时可以看到相关现象

docker ros 软路由_文件系统_03


这是 docker 的 UnionFS,联合文件系统,以下是 UnionFS 自底而上的组成

docker ros 软路由_架构_04

  • bootfs
  • bootloader
    最先加载,用于加载 kernel
  • kernel
    成功加载后,接过内存使用权并加载 rootfs
  • rootfs
    不同操作系统发行版的文件系统,相当于 centos 等
    rootfs 通常也作为基础镜像(base image)存在
  • 镜像层
    镜像层可以包括多个层次,按依赖关系顺次罗列,
    比如 jdk、mysql、app
    每追加一层,这一层之下的镜像都做完父镜像存在
  • 容器层
    通过镜像启动容器时,docker 会在最顶层添加一个可写的文件系统
    容器层以下,都是只读的

§3 安装

docker 的获取和安装可以参考 官网

§3.1 前提

linux 系统要求

  • CentOs 7 以上
  • 系统版本 64 位
  • linux 内核 3.8 以上

通过下面指令查看

cat /etc/redhat-release
uname -r

docker ros 软路由_文件系统_05

卸载旧版本

yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine

docker ros 软路由_文件系统_06

安装 gcc

yum -y install gcc

docker ros 软路由_docker_07


yum -y install gcc-c++

docker ros 软路由_docker_08

§3.2 安装

安装 yum-utils

yum install -y yum-utils

docker ros 软路由_架构_09

添加 stable 仓库

yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

docker ros 软路由_文件系统_10

刷新 yum 缓存(可选)

yum clean all
yum makecache fast
yum update

docker ros 软路由_架构_11


安装 docker

yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

如果安装失败,重新刷新 yum 缓存

docker ros 软路由_docker ros 软路由_12

§3.3 启动

启动 docker 服务

systemctl start docker

运行 hello world 验证启动

docker run hello-world

docker ros 软路由_文件系统_13

查看 docker 进程

ps -ef |grep docker

docker ros 软路由_云原生_14

查看 docker 版本

docker version

docker ros 软路由_docker ros 软路由_15

§3.4 卸载

停止 docker 服务

system stop docker

从 yum 卸载

yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin

删除 docker 的镜像、容器、卷和用户配置

rm -rf /var/lib/docker
rm -rf /var/lib/containerd

§4 镜像加速器

获取加速器地址,以阿里云为例

docker ros 软路由_文件系统_16


docker ros 软路由_docker_17


使用加速器地址,以阿里云为例

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://2mkskfi4.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker