1 什么是Docker

Docker的英文翻译是“搬运工”的意思,他搬运的东西就是我们常说的集装箱Container,Container 里面装的是任意类型的 App,我们的开发人员可以通过 Docker 将App 变成一种标准化的、可移植的、自管理的组件,我们可以在任何主流的操作系统中开发、调试和运行。

2 Docker 和传统虚拟机比较

以下两张图分别介绍了虚拟机与 Docker 容器的结构。
image.png
对于虚拟机技术来说,传统的虚拟机需要模拟整台机器包括硬件,每台虚拟机都需要有自己的操作系统,虚拟机一旦被开启,预分配给他的资源将全部被占用。每一个虚拟机包括应用,必要的二进制和库,以及一个完整的用户操作系统。
image.png
容器技术和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。容器内没有自己的内核,也没有进行硬件虚拟。

从概念上来看 Docker 和我们传统的虚拟机比较类似,只是更加轻量级,更加方便使,Docker 和虚拟机最主要的区别有以下几点:

  • 虚拟化技术依赖的是物理CPU和内存,是硬件级别的;而我们的 Docker 是构建在操作系统层面的,利用操作系统的容器化技术,所以 Docker 同样的可以运行在虚拟机上面。
  • 我们知道虚拟机中的系统就是我们常说的操作系统镜像,比较复杂;而 Docker 比较轻量级,我们可以用 Docker 部署一个独立的 Redis,就类似于在虚拟机当中安装一个 Redis 应用,但是我们用 Docker 部署的应用是完全隔离的。
  • 我们都知道传统的虚拟化技术是通过快照来保存状态的;而 Docker 引入了类似于源码管理的机制,将容器的快照历史版本一一记录下来,切换成本非常之低。
  • 传统虚拟化技术在构建系统的时候非常复杂;而 Docker 可以通过一个简单的 Dockerfile 文件来构建整个容器,更重要的是 Dockerfile 可以手动编写,这样应用程序开发人员可以通过发布 Dockerfile 来定义应用的环境和依赖,这样对于持续交付非常有利。

    3 Docker Engine

    Docker Engine是一个C/S架构的应用程序,主要包含下面几个组件:

  • 常驻后台进程Dockerd

  • 一个用来和 Dockerd 交互的 REST API Server
  • 命令行CLI接口,通过和 REST API 进行交互(我们经常使用的 docker 命令)

01 Docker 介绍和安装 - 图301 Docker 介绍和安装 - 图4

4 Docker 架构

Docker 使用 C/S (客户端/服务器)体系的架构,Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建,运行和分发 Docker 容器。Docker 客户端和守护进程可以在同一个系统上运行,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使用 REST API 通过UNIX套接字或网络接口进行通信。
01 Docker 介绍和安装 - 图5 01 Docker 介绍和安装 - 图6

  • Docker Damon:dockerd,用来监听 Docker API 的请求和管理 Docker 对象,比如镜像、容器、网络和 Volume。
  • Docker Client:docker,docker client 是我们和 Docker 进行交互的最主要的方式方法,比如我们可以通过 docker run 命令来运行一个容器,然后我们的这个 client 会把命令发送给上面的 Dockerd,让他来做真正事情。
  • Docker Registry:用来存储 Docker 镜像的仓库,Docker Hub 是 Docker 官方提供的一个公共仓库,而且 Docker 默认也是从 Docker Hub 上查找镜像的,当然你也可以很方便的运行一个私有仓库,当我们使用 docker pull 或者 docker run 命令时,就会从我们配置的 Docker 镜像仓库中去拉取镜像,使用 docker push 命令时,会将我们构建的镜像推送到对应的镜像仓库中。
  • Images:镜像,镜像是一个只读模板,带有创建 Docker 容器的说明,一般来说的,镜像会基于另外的一些基础镜像并加上一些额外的自定义功能。比如,你可以构建一个基于 Centos 的镜像,然后在这个基础镜像上面安装一个 Nginx 服务器,这样就可以构成一个属于我们自己的镜像了。
  • Containers:容器,容器是一个镜像的可运行的实例,可以使用 Docker REST API 或者 CLI 来操作容器,容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
  • 底层技术支持:Namespaces(做隔离)、CGroups(做资源限制)、UnionFS(镜像和容器的分层) the-underlying-technology Docker 底层架构分析

    5 安装

    直接前往官方文档选择合适的平台安装即可,比如我们这里想要在centos系统上安装 Docker,这前往地址https://docs.docker.com/engine/install/centos/根据提示安装即可。

    1. 用非root用户管理docker

    1. sudo groupadd docker
    2. sudo usermod -aG docker $USER

    2. 卸载旧版本

    1. sudo yum remove docker \
    2. docker-client \
    3. docker-client-latest \
    4. docker-common \
    5. docker-latest \
    6. docker-latest-logrotate \
    7. docker-logrotate \
    8. docker-engine

    3. 安装

    安装最新版本 ```bash sudo yum install -y yum-utils sudo yum-config-manager \ —add-repo \ https://download.docker.com/linux/centos/docker-ce.repo sudo yum install docker-ce docker-ce-cli containerd.io

查看版本

yum list docker-ce —showduplicates | sort -r sudo systemctl start docker

  1. 安装指定版本
  2. ```bash
  3. 1. 找出版本
  4. [admin@controller-server ~]$ yum list docker-ce --showduplicates | sort -r
  5. Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
  6. * updates: ftp.sjtu.edu.cn
  7. Loaded plugins: fastestmirror
  8. Installed Packages
  9. * extras: mirrors.njupt.edu.cn
  10. * epel: mirrors.nju.edu.cn
  11. docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
  12. docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
  13. docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
  14. docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
  15. docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
  16. docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
  17. docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
  18. docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
  19. docker-ce.x86_64 3:20.10.1-3.el7 docker-ce-stable
  20. docker-ce.x86_64 3:20.10.10-3.el7 docker-ce-stable
  21. docker-ce.x86_64 3:20.10.0-3.el7 docker-ce-stable
  22. 2. 指定版本号安装
  23. 版本号为第二列中, :和-号之间
  24. #sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
  25. [admin@controller-server ~]$ yum install docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io

4. 启动docker

  1. systemctl start docker
  2. systemctl enable docker

5. 卸载docker

  1. sudo yum remove docker-ce docker-ce-cli containerd.io
  2. sudo rm -rf /var/lib/docker
  3. sudo rm -rf /var/lib/containerd

6. rpm包安装

另外一种安装方式是可以直接下载指定的软件包直接安装即可,前往地址:https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 找到合适的.rpm包下载,然后安装即可:
$ sudo yum install /path/to/package.rpm