Docker 安装与核心知识总结
Docker 安装与核心知识总结
一、容器核心知识
(一)容器定义
容器是轻量级、可移植且自包含的软件打包技术,能让应用在几乎任何环境中以相同方式运行。它包含应用程序本身以及应用所需的依赖(如类库、二进制文件、配置文件等),这些内容会被统一打入容器镜像包,可抽象掉操作系统发行版本和基础环境差异
(二)容器组成
- 应用程序本身,是容器运行的核心内容
- 应用依赖,像应用所需的库或其他软件,保障应用正常运行
(三)容器与 Linux 虚拟机的区别
对比维度 | Linux 容器 | 虚拟机 |
---|---|---|
资源消耗 | 除运行应用外,基本不消耗额外系统资源,资源利用率高 | 运行多个应用需启动多个虚拟机,资源消耗大 |
架构层级 | 直接运行在宿主操作系统(Host OS)上,共享宿主内核 | 需通过 Hypervisor(虚拟化管理程序)运行,包含独立的客户操作系统(Guest OS) |
启动速度 | 启动速度为秒级,能快速响应需求 | 启动速度较慢,通常为分钟级 |
(四)容器的必要性
- 应用与环境的复杂性问题:如今应用常由多种服务(如 MQ、Cache、DB)构建,且需部署到虚拟服务器、私有云、公有云等不同环境。不同服务有各自依赖,不同环境存在差异,形成服务与环境的 N×M 矩阵,导致开发人员需考虑多环境适配,运维人员需为不同服务和平台配置环境,任务艰巨
- 类比解决思路:这类似货物运输难题 —— 不同货物混装易受损,且在不同交通工具间转运需反复装卸,耗时且易损坏货物。而容器如同集装箱,能将应用及依赖 “封装”,在不同环境中无需频繁 “装卸”(配置环境),可高效 “转运”(部署)
(五)容器标准化
2015 年,Google、Docker、CoreOS、IBM、微软、红帽等厂商联合成立 OCI(Open Container Initiative)组织,并于 2016 年 4 月推出首个开放容器标准,包括 runtime spec 标准和 image format spec 标准。该标准为容器市场提供稳定性,企业可放心采用容器技术,用户在容器相关操作(如打包、部署、镜像管理等)上有统一规范可循
(六)主流容器 Runtime
- Lxc:Linux 上的老牌 Runtime,Docker 最初使用其作为 Runtime
- Runc:Docker 自主开发的容器 Runtime,符合 OCI 规范,现为 Docker 默认 Runtime
- Rkt:CoreOS 开发的容器 Runtime,符合 OCI 规范,可运行 Docker 容器
二、Docker 核心知识
(一)Docker 简介
- 起源与授权:最初是 dotCloud 公司创始人 Solomon Hykes 在法国发起的内部项目,基于该公司多年云服务技术革新而来,2013 年 3 月以 Apache 2.0 授权协议开源
- 开发语言与维护:用 Go 语言编写,主要项目代码在 GitHub 上维护
- 核心定位:是用于开发、交付和运行应用程序的开放平台,能将应用程序与基础架构分离,让用户以管理应用程序的方式管理基础架构,减少代码编写与生产环境运行代码间的延迟
(二)Docker 优势
- 更快速的交付和部署:开发者可用标准镜像构建开发容器,运维人员直接用该容器部署代码;Docker 能快速创建容器、迭代应用,过程全程可见,且容器启动为秒级,大幅节省开发、测试、部署时间
- 更高效的虚拟化:无需额外 hypervisor 支持,基于内核级虚拟化,性能和效率更高
- 更轻松的迁移和扩展:容器可在物理机、虚拟机、公有云、私有云等多种平台运行,兼容性强,便于应用在不同平台间迁移
- 更简单的管理:只需少量修改即可替代大量更新工作,修改以增量方式分发和更新,实现自动化、高效管理
(三)Docker 架构结构
- 架构模式:采用 C/S(客户端 / 服务器)体系架构,Docker 客户端与 Docker 守护进程通信,守护进程负责构建、运行和分发 Docker 容器,二者可在同一系统运行,也可远程连接,通过 REST API 借助 UNIX 套接字或网络接口通信
- 核心组件
- Docker 客户端:常用客户端为 docker 命令,可在宿主机构建和运行容器,也可通过 REST API 与服务器通信
- Docker 服务器:即 Docker daemon,以 Linux 后台服务形式运行在 Docker host 上,负责创建、运行、监控容器及构建、存储镜像,默认仅响应本地 host 的客户端请求
- Docker 镜像:只读模板,是创建 Docker 容器的基础
- Docker 容器:Docker 镜像的运行实例,可通过 CLI(docker)或 API 启动、停止、移动、删除;对应用软件而言,镜像是软件生命周期的构建和打包阶段,容器是启动和运行阶段
- Registry:存放 Docker 镜像的仓库,分公有和私有两类。公有仓库中,Docker Hub 是最大的官方公有仓库,国内腾讯云、阿里云也提供本地源;私有仓库供用户在本地网络内创建,仅自己可访问,用于存放不希望公开的镜像
三、Docker 部署
(一)版本选择
Docker 官方提供企业版(Docker-EE)和社区版(Docker-CE)。Docker-CE 由社区维护,提供技术支持,为免费版本,适合个人开发人员和小团队;Docker-EE 为收费版本,有售后和技术团队支持,针对企业开发和 IT 团队设计,功能更丰富且安全保障更强。通常 Docker-CE 可满足多数需求
(二)安装环境
- 管理工具:docker-ce 最新版本
- Runtime:使用 Docker 默认支持的 runc
- 操作系统:Centos7,该系统在国内应用广泛
(三)部署步骤
- 关闭防火墙和 selinux 并重启:执行
systemctl stop firewalld
关闭防火墙,systemctl disable firewalld
禁用防火墙,编辑/etc/selinux/config
文件将 SELINUX 设为 disabled,最后执行reboot
重启系统 - 修改 Centos 的 yum 源为阿里源:先执行
yum -y install wget
安装 wget 工具,再通过wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
获取阿里源配置文件 - 添加 Docker 源并安装 Docker:执行
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
添加 Docker 源,yum clean all
清理 yum 缓存,最后yum install -y docker-ce
安装 Docker - 启动 Docker 并查看版本:
systemctl restart docker
启动 Docker,systemctl enable docker
设置 Docker 开机自启,docker --version
查看 Docker 版本(示例版本为 Docker version 20.10.17, build 100c701) - 配置镜像加速器:编辑
/etc/docker/daemon.json
文件,添加镜像加速器地址(如https://docker.m.daocloud.io
、https://dockerproxy.com
等),之后执行systemctl daemon-reload
重新加载配置,systemctl restart docker
重启 Docker 使配置生效(镜像加速器需在阿里源官网申请账号后获取)
具体示例:
docker部署:
已关闭防火墙和selinux
将Centos的yum源修改为阿里源(该centos系统能够连接外网):
[root@docker ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo[root@docker ~]# yum -y install epel-release
添加Docker源,开始安装Docker:
安装必要的一些系统工具:
[root@docker ~]# sudo yum -y install yum-utils
添加软件源信息:
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装Docker:
[root@docker ~]# sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
开启Docker服务,并查看Docker版本:
[root@docker ~]# systemctl restart docker
[root@docker ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker ~]# docker --version
Docker version 26.1.4, build 5650f9b
配置镜像加速器(加速器需要自己在阿里源官网申请一个账号,工作台-容器镜像服务-镜像工具-镜像加速器)
[root@docker ~]# vim /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.m.daocloud.io", "https://dockerproxy.com", "https://docker.mirrors.ustc.edu.cn", "https://docker.nju.edu.cn"]
}
~
[root@docker ~]# systemctl daemon-reload
[root@docker ~]# systemctl restart docker
四、核心总结
- 容器是轻量级、可移植、自包含的软件打包技术,保障应用在不同环境中运行一致性
- 容器与虚拟化本质不同,容器共享宿主机内核空间、隔离用户空间,虚拟化构建完全独立的虚拟基础设施环境
- 容器能让软件具备超强可移植能力,有效解决应用在多环境部署的适配难题