关于 dcoker
之前写了一些关于这一部分的原因,但是感觉都不全面,所以打算重新完整的做个整理,查漏补缺。
现在已经是 2020 年,作为运维人员慢慢绕不过的坎就是容器编排这一块的内容。相较于传统运维,容器运维在发展前景和薪资待遇上面还是非常可观的。这也是学习该技术的目的与动力。
关于 docker 的发展历史,需要事先简单了解以下内容:
1. docker 是 dotcloud 公司(成立于 2010 年,2013 年更名为 Docker 股份有限公司)开源在 GitHub 上面的一个项目。
2. 自 2015 年 runC 发布之后,docker 走上了真正跨平台的道路,这也是 docker 的一个核心思想的由来:一次构建,到处运行。
3. 2016 年开始,docker 拆分成为了社区版 docker CE 和商业版 docker EE,我们都用 docker CE。
4. docker 在 1.13 版本之后,命名方式更改为 年.月 的方式,如 18.06,每月发布前沿版(Edge)和三个月发布稳定版(Stable)。
5. docker 在老版本 CentOS 源中叫 docker,Ubuntu 源中叫 docker.io,现在已经统一叫做 docker-ce。
6. docker 存储引擎在 CentOS 中经历了由 devicemapper 到 overlay 再到 overlay2 的进阶,性能已能够和 Ubuntu 的 AUFS 相提并论。
关于 docker 的一些概念,需要事先简单了解以下内容:
1. docker 由 Go 语言开发,属于典型的 C/S 架构的产品。
2. docker 将容器技术推向了巅峰,但是容器技术并非起源于 docker。
3. docker 属于 Linux Container(LXC,内核自带,一种内核虚拟化技术,提供轻量级进程和资源隔离)的上层封装,所以并非新技术。
4. docker 并非容器技术的最佳实践,但是由于名气大,使用广,目前仍然是主流学习的目标。
5. 学 docker 不是最终目的,是为学习容器编排工具 Kubernetes 做准备。
6. docker 拥有自己的编排工具 docker swarm,但是由于干不赢 kubernetes 的原因已经快停止维护。
7. docker 是一个 Paas 服务,关于 Pass,Saas 等服务的概念可以参考下图,红色部分为用户需要管理部分:
至于其它内容,在后面写到的时候再说!
docker 的优缺点
在网上可以随处可见也是官方文档上面随处可见的一张关于 docker 和 VM 做比较的图:
可以明显的发现:
传统的 VM 的工作过程:
1. 首先,需要一台服务器,在上面安装类似于 VMware workstation 这样的软件,只不过在服务器上一般使用的是 VMware esxi 这类。
2. 然后在这个软件的管理界面上面新建虚拟机,安装操作系统,配置 IP 等。
3. 最后再在这个新建的虚拟机上面安装想要运行的服务。
容器的工作过程:
1. 给服务器安装系统,可以是 Linux 也可以是 Windows,并安装上 docker。
2. 运行我们想要运行的服务容器,每个容器以一个单独的进程存在与宿主机的系统上面。
两者做对比可以发现:
1. 传统的 VM 每次新增虚拟机就需要重装系统,并单独运行系统,这样会导致 CPU,内存,磁盘的额外开销。但是好处在于隔离效果比较好。
2. 使用容器则不需安装额外的操作系统,每个服务都以进程的方式跑在宿主机上,且拥有独立的虚拟网络环境,独立的磁盘存储划分,能节省系统开销。但相较传统的 VM 在隔离性上不那么好,毕竟还在一个宿主系统下面,如果这个宿主系统挂掉,上面的所有运行的容器都会挂掉。
docker 的核心组件
服务端(Server)和客户端(Client):C/S 架构,所有的执行都是通过服务端发送给客户端执行。
镜像(Image):需要运行的服务和运行环境封装在一起的包。
容器(Container):通过镜像运行起来的实例。
仓库(Repository):同一镜像可能有不同版本,这些包含同一镜像不同版本的地址就是该镜像的仓库。
注册点(Registry):各种仓库的集合地址就是注册点。
具体关系可以参照下图:
安装部署
docker 在网上的安装方式一般会看到这几种:curl 脚本安装,源码安装,yum 安装,rpm 安装。
通常对于生产环境尽量推荐选择 rpm 版本安装,原因在于便于版本控制。不安装最新的,怕有坑。
1. 安装准备:
下载方式可以选择 docker 官方镜像源:
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/
但是可能速度会很慢,所以也可以选择中科大提供的源:
http://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/x86_64/stable/Packages/
我这里由于是测试版本,所以选择最新的 19.03.6-3 版本,下载所需的包:
containerd.io-1.2.6-3.3.el7.x86_64.rpm docker-ce-19.03.6-3.el7.x86_64.rpm docker-ce-cli-19.03.6-3.el7.x86_64.rpm
这里准备了 4 台 CentOS Linux release 7.5.1804 的虚拟机,IP 分别是 192.168.200.101-104,并事先关闭防火墙和 Selinux。
为了更好的支持,也可以升级一下机器的内核,当然如果你的服务器已经运行其他服务,最好不要升级,怕出问题。
具体升级方法可以参照我之前的博客,里面有一键升级脚本:
https://www.cnblogs.com/Dy1an/p/12011691.html
2. 安装依赖:
# 卸载旧版本 yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine # 安装依赖 yum install -y yum-utils device-mapper-persistent-data lvm2 bridge-utils bash-completion wget container-selinux # 更新系统 yum update
3. 上传之前下载的包并安装:
mkdir docker cd docker/ # 上传文件到该目录下面,再执行安装 yum -y install *
4. 启动并设置开机自启:
systemctl start docker
systemctl enable docker
systemctl status docker
5. 查看:
docker version
结果如图:
6. 镜像仓库优化:
由于 docker 默认的镜像仓库 docker hub 因为某些不可描述的原因访问及其慢,可以将它换为国内的镜像源:
阿里镜像源:麻烦,需要专门申请账户。
中科大镜像源:直接配置即可。(我写文章时候中科大打不开,注意一下,不行就用阿里的,虽然麻烦一些)
# 拷贝启动文件 cp /lib/systemd/system/docker.service /etc/systemd/system # 修改配置 sed -i "s#^ExecStart=.*#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --registry-mirror=https://docker.mirrors.ustc.edu.cn#g" /etc/systemd/system/docker.service # 重启docker chmod 755 /etc/systemd/system/docker.service systemctl daemon-reload systemctl restart docker
此时查看 docker 进程:
ps -ef | grep docker
能够看到进程后面多了一个中科大镜像地址:
到此,docker 安装完成,接下来是 docker 的使用!