Bootstrap

【Docker集群应用】Docker基础与部署安装

Docker

概述

Docker 是一个开源的应用容器引擎,基于 Go 语言开发并遵循 Apache 2.0 协议开源。它允许在 Linux 容器中运行应用程序,是一种轻量级的“虚拟机”。Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
Docker 的 Logo 设计
Docker 的 Logo 设计为一条蓝色鲸鱼,拖着许多集装箱。鲸鱼代表宿主机,集装箱代表相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker 的设计宗旨
Docker 的设计宗旨是 Build, Ship and Run Any App, Anywhere。通过对应用组件的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的。这里的组件可以是一个应用、一套服务,甚至是一个完整的操作系统。

容器化的优势

  • 灵活:即使是最复杂的应用也可以集装箱化。
  • 轻量级:容器利用并共享主机内核。
  • 可互换:可以即时部署更新和升级。
  • 便携式:可以在本地构建,部署到云,并在任何地方运行。
  • 可扩展:可以增加并自动分发容器副本。
  • 可堆叠:可以垂直和即时堆叠服务。

Docker 与 虚拟机的区别

特性Docker 容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗 50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源隔离/限制完全隔离

Linux 六大命名空间

命名空间缩写作用效果
MNT挂载文件系统隔离每个命名空间可以有自己的文件系统挂载点
NET网络网络资源隔离每个命名空间可以有自己的网络栈,包括网络接口、路由表等
PID进程进程号隔离每个命名空间有自己独立的 PID 编号空间
IPC间通进程间通信隔离每个命名空间有自己独立的 System V IPC 和 POSIX 消息队列
UTS主机主机名、域名隔离每个命名空间可以有自己的主机名和域名
USER用户用户名、组名隔离每个命名空间可以有自己的用户和组 ID 映射

Docker 的核心技术

Docker 容器本质上是宿主机的一个进程,通过以下技术实现资源隔离和限制:

  • Namespace:实现资源隔离。
  • Cgroup:实现资源限制。
  • 写时复制技术(Copy-on-Write):实现高效的文件操作。

Docker 核心概念

  1. 镜像(Image)
    • Docker 镜像是创建容器的基础,类似虚拟机的快照。
    • 镜像是一个面向 Docker 容器引擎的只读模板,包含运行应用程序所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
    • 镜像也是一个压缩包,包含了完整的操作系统。
  2. 容器(Container)
    • Docker 容器是从镜像创建的运行实例,可以被启动、停止和删除。
    • 每个容器都是相互隔离、互不可见的,以保证平台的安全性。
    • 容器可以看做是一个简易版的 Linux 环境和运行在其中的应用程序。
  3. 仓库(Repository)
    • Docker 仓库用来集中保存镜像。
    • 可以将创建的镜像上传到公有仓库或私有仓库。
    • 在另一台机器上使用镜像时,只需从仓库获取。

Docker 数据存储
Docker 的镜像、容器、日志等内容默认存储在 /var/lib/docker 目录下。

Docker部署安装

  • Docker 目前仅支持 64 位系统。

关闭防火墙和 SELinux

systemctl stop firewalld.service
setenforce 0

安装依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2
  • yum-utils:提供了 yum-config-manager 工具。
  • device-mapper:Linux 内核中支持逻辑卷管理的通用设备映射机制。
  • device-mapper-persistent-datalvm2:device-mapper 存储驱动程序所需的依赖包。

设置阿里云镜像源

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

安装 Docker-CE 并设置为开机自动启动

yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker.service
systemctl enable docker.service
  • Docker 系统包含两个程序:Docker 服务端和 Docker 客户端。
  • Docker 服务端是一个服务进程,负责管理所有容器。
  • Docker 客户端是 Docker 服务端的远程控制器,用于控制 Docker 服务端进程。

查看 Docker 版本信息

docker version

查看 Docker 信息

docker info
 
Client:
 Context:    default
 Debug Mode: false
 Plugins:
  app: Docker App (Docker Inc., v0.9.1-beta3)
  buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)

Server:
 Containers: 0						# 容器数量
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 1							# 镜像数量
 Server Version: 20.10.3			# server 版本
 Storage Driver: overlay2			# docker 使用的是 overlay2 文件驱动
  Backing Filesystem: xfs			# 宿主机上的底层文件系统
  Supports d_type: true
  Native Overlay Diff: true
 Logging Driver: json-file
 Cgroup Driver: cgroupfs			# Cgroups 驱动
 Cgroup Version: 1
 Plugins:
  Volume: local
  Network: bridge host ipvlan macvlan null overlay
  Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
 Swarm: inactive
 Runtimes: io.containerd.runtime.v1.linux runc io.containerd.runc.v2
 Default Runtime: runc
 Init Binary: docker-init
 containerd version: 269548fa27e0089a8b8278fc4fc781d7f65a939b
 runc version: ff819c7e9184c13b7c2607fe6c30ae19403a7aff
 init version: de40ad0
 Security Options:
  seccomp
   Profile: default
 Kernel Version: 3.10.0-693.el7.x86_64		# 宿主机的相关信息
 Operating System: CentOS Linux 7 (Core)
 OSType: linux
 Architecture: x86_64
 CPUs: 1
 Total Memory: 976.3MiB
 Name: localhost.localdomain
 ID: Y4ES:FTH2:ZJL7:MRVE:RJVB:WJIB:S7BV:C5IZ:LMBR:E4G5:QWSM:SNDT
 Docker Root Dir: /var/lib/docker			# docker 数据存储目录
 Debug Mode: false
 Registry: https://index.docker.io/v1/		# registry 地址
 Labels:
 Experimental: false
 Insecure Registries:
  127.0.0.0/8
 Registry Mirrors:							# 加速站点
  https://6ijb8ubo.mirror.aliyuncs.com/
 Live Restore Enabled: false

Docker 系统信息

  • Client 部分

    • Context:当前使用的 Docker 上下文(默认为 “default”)。
    • Debug Mode:客户端调试模式是否开启(此处为 false)。
    • Plugins:列出已安装的 Docker 插件,如 Docker App 和 Buildx。
  • Server 部分(关键信息):

    • Containers
      • Containers: 0(总容器数,包括运行、暂停和停止的容器)。
      • Running: 0(正在运行的容器数)。
      • Paused: 0(暂停的容器数)。
      • Stopped: 0(停止的容器数)。
    • Images: 1(本地镜像数)。
    • Server Version: 20.10.3(Docker 服务器版本)。
    • Storage Driver: overlay2(Docker 使用的存储驱动)。
      • Backing Filesystem: xfs(宿主机上的底层文件系统)。
      • Supports d_type: true(表示文件系统支持 d_type,有助于性能优化)。
      • Native Overlay Diff: true(表示使用原生的 overlay diff 技术,提高性能)。
    • Logging Driver: json-file(日志驱动)。
    • Cgroup Driver: cgroupfs(Cgroups 驱动,用于资源限制和管理)。
    • Plugins:列出 Docker 支持的卷、网络和日志插件。
    • Swarm: inactive(Swarm 集群模式未启用)。
    • Runtimes:列出 Docker 支持的运行时,如 runc。
    • Default Runtime: runc(默认运行时)。
    • Security Options:列出安全选项,如 seccomp(安全计算模式)。
    • Kernel VersionOperating System:提供宿主机的内核版本和操作系统信息。
    • Architecture:宿主机的架构(如 x86_64)。
    • CPUsTotal Memory:宿主机的 CPU 数和总内存。
    • NameID:Docker 主机的名称和唯一 ID。
    • Docker Root Dir:Docker 数据存储的根目录(如 /var/lib/docker)。
    • Debug Mode:服务器调试模式是否开启(此处为 false)。
    • Registry:默认的 Docker 镜像仓库地址。
    • Labels:Docker 主机的标签。
    • Experimental:是否启用实验性功能(此处为 false)。
    • Insecure Registries:列出不安全的镜像仓库地址(如 127.0.0.0/8)。
    • Registry Mirrors:列出镜像加速站点,用于加速 Docker 镜像的拉取和推送。
    • Live Restore Enabled:是否启用实时恢复功能(此处为 false)。
  • 存储驱动(Storage Driver):Docker 使用 overlay2 作为其默认的存储驱动,它提供了高效的镜像和容器管理。

  • Cgroup 驱动(Cgroup Driver):cgroupfs 是 Linux 上用于限制、记录和隔离进程组所使用的物理资源(如 CPU、内存、磁盘 I/O 等)的机制。

  • 运行时(Runtimes):Docker 支持多种容器运行时,其中 runc 是默认的运行时,用于启动和管理容器。

  • 安全选项(Security Options):seccomp 是一种内核功能,用于在 Linux 上提供沙箱环境,限制容器内进程能够执行的系统调用。

  • 镜像加速站点(Registry Mirrors):通过配置镜像加速站点,可以加速 Docker 镜像的下载速度,提高开发效率。

;