Docker的概念、架构、安装详解
一、Docker产生的背景和优势
微服务架构的兴起伴随着各种各样相比于单体架构的优势,但是微服务的拆分和集群却大大增加了部署的难度。
比如:
-
分布式系统中,依赖关系复杂,容易出现兼容性问题。
-
开发、测试、生产环境各有有差异,有的差异还比较大。
在Docker
没有出现之前,通常使用虚拟机的方式来部署微服务。
但是使用虚拟机来部署为服务,依旧有很多困扰。
除了对服务器性能有所要求,操作起来也是非常的繁琐。
光是使用vmware
创建不同微服务的虚拟机,再配置不同微服务的运行环境就让人望而却步。
Docker
的出现就是为了解决分布式部署的难题,并且以更低的成本去创建微服务的部署环境。
1.1 Docker是如何解决这些问题的
1.1.1 解决依赖的兼容问题
-
将应用的
Libs
(函数库)、Deps
(依赖)、配置与应用本身一起打包 -
将每个打包好的应用放到一个隔离容器去运行,避免互相干扰
这样打包好的应用包中,既包含应用本身,也包含应用所需要的Libs
、Deps
,无需再操作系统上安装这些。
因此就不存在不同应用之间的兼容问题了。
1.1.2 解决打包应用跨不同Linux系统运行的问题
Docker
将用户程序与所需要调用的系统(比如CenterOS
)的函数库一起打包。Docker
运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行。
关于函数库的解释:
各种不同的Linux
系统,其Linux
内核都是相同的。只是系统应用不相同。
并且对于操作Linux
内核的指令集的封装有所不同。
而不同系统对于自己Linux
指令集的封装可能会不一样,就会形成不同的函数库。
Docker
直接借助不同操作系统的Linux
内核去运行,二部是直接使用当前系统的函数库。
自然就解决了跨系统运行的问题。
因此Docker打包好的应用可以部署在任何基于Linux内核的系统上运行!
注意:
Docker
本质上只能够在Linux
系统上运行。
即使现在有了可以在Windows
上运行的Docker
,也只不过是虚拟了一个隔离的Linux环境去运行Docker
。
只不过这个过程用户看不到。
1.2 Docker的优势
- 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统。
- 运行时利用沙箱机制形成隔离容器,各个应用互不干扰。
- 启动、移除都可以通过一行命令完成,方便快捷。
- 占用资源小。
- 共享操作系统主机资源和系统内核。
1.3 Docker与虚拟机的主要不同点
1) 系统方面
Docker
是一个系统进程;- 虚拟机是在操作系统中的操作系统。
2)运行和占用资源方面
Docker
体积小,硬盘占用以MB
为单位,启动速度快,性能好;- 虚拟机体积大、,硬盘占用以
GB
为单位,启动速度慢,性能一般。
Docker容器 | 虚拟机 | |
---|---|---|
操作系统 | 与宿主机共享操作系统 | 宿主机操作系统上运行虚拟机操作系统 |
存储大小 | 镜像小,便于存储与传输 | 镜像庞大(vmdk、vdi等) |
运行性能 | 几乎无额外性能损失 | 操作系统额外的CPU、内存消耗 |
移植性 | 轻便、灵活,适应于Linux | 笨重,与虚拟化技术耦合度高 |
硬件亲和性 | 面向软件开发者 | 面向硬件运维者 |
部署速度 | 快速,秒级 | 较慢,10s以上 |
二、Docker重要概念
名称 | 说明 |
---|---|
镜像(Image) | Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像 |
容器(Container) | 镜像中的应用运行后形成的进程就是容器,Docker会给容器进程做隔离,对外不可见 |
仓库(Repository) | Docker 仓库和Git的仓库相似,在本地构建完镜像之后,即可通过仓库进行镜像的分发 |
2.1 镜像和容器的解释
应用最终都是代码组成,都是硬盘中的一个个的字节形成的文件。只有运行时,才会加载到内存,形成进程。
-
镜像,就是把一个应用在硬盘上的文件、运行环境、部分系统函数库打包形成的文件包。文件包是只读的。
image
文件可以看作是容器的模板。Docker
根据image
文件生成容器的实例。 -
容器,就是将这些文件中编写的程序、函数加载到 内存中,形成进程,只不过要隔离起来。
因此一个镜像可以启动多次,形成多个容器进程。
-
仓库,就是放一堆镜像的地方,可以把镜像发布到仓库中,需要的时候再从仓库中拉下来就可以了。
意思就是
Docker
可以从镜像托管仓库中拉取镜像到本地仓库,也可以把本地仓库中的镜像上传到镜像托管仓库。
2.2 镜像托管仓库DockerHub
开源应用程序非常多,打包这些应用往往是重复的劳动。
为了避免这些重复劳动,人们就会将自己打包的应用镜像,例如Redis
、MySQL
镜像放到网络上,共享使用。
就像Git
和GitHub
的代码共享一样。
-
DockerHub
是一个官方的Docker
镜像的托管平台。这样的平台称为Docker Registry
(Docker
注册中心)。https://hub.docker.com/
-
国内也有类似于
DockerHub
的公开服务,比如 :-
网易云镜像服务
https://c.163yun.com/hub
-
阿里云镜像库
https://cr.console.aliyun.com/
-
-
自己也可以构建
Docker
仓库,构建一个属于自己的私有云仓库。
使用国内镜像仓库可以提升拉取镜像的速度。
2.3 Docker架构
Docke
r是一个CS
架构的程序,由两部分组成:
- 服务端(
server
):Docker
守护进程,负责处理Docker
指令,管理镜像、容器等 - 客户端(
client
):通过命令或RestAPI
向Docker
服务端发送指令。可以在本地或远程向服务端发送指令。
释义:
假设客户端使用docker pull
系列命令拉取一个Nginx
镜像,
客户端再用docker run
系列命令,让Docker
服务端执行对应的镜像,生成一个不被其它容器影响的独立容器。
2.4 Docker运行的基本流程
-
用户使用
Docker Client
与Docker Daemon
建立通信,并表送请求给后者。 -
Docker Daemon
作为Docker
陈构中的主体部分。首先提供
DockerServer
的功能使其可以按受Docker Client
的请求。 -
Docker Engine
执行Docker
内部的一系列工作,每一项工作都是以一个Job的形式的存在。 -
job
的运行过程中,当需要容器镜像时,则从Docker Registry
中下载镜像,并通过镜像管理驱动Graph driver
形式存储 -
当需要为
Docket
创建网络环境时。通过网络管理驱动Network diver
创建并配置Docker
容器网络环境。 -
当需要限制
Docker
容器运行资源或执行用户指令等操作时,则通过Exec driver
来完成。 -
Libcontainer
是一项独立的容器管理包。Network driver
以及Exec driver
都是通过Libcontainer
来实现具体对容器进行的操作
三、Docker的安装
Docker
分为 CE
和 EE
两大版本:
-
CE
即社区版(免费)。 -
EE
即企业版,强调安全,付费使用。
官方安装文档:
https://docs.docker.com/install/
Docker CE
支持 64 位版本 CentOS 7
,并且要求内核版本不低于 3.10, CentOS 7
满足最低内核的要求。
这里就以Docker CE
在 CentOS 7
上的安装为例。
3.1.卸载(可选操作)
如果之前安装过旧版本的Docker,可以先卸载:
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine \
docker-ce
注:
\
是命令分隔符,当一行命令太长的时候,可以使用它来进行换行。
3.2 安装yum-utils工具
# 安装它是因为系统默认没有命令yum-config-manager
# yum-config-manager命令在yum-utils中
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2 --skip-broken
3.3 重新设置本地yum镜像源
#命令1 添加 Docker 稳定版本的 yum 软件源,即配置docker仓库
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 命令2 sed -i 直接修改读取的文件内容,而不是输出到终端
# sed -i 's/原字符串/新字符串/g' /etc/yum.repos.d/docker-ce.repo
# 这里就是把文件/etc/yum.repos.d/docker-ce.repo中的
# download.docker.com/mirrors.aliyun.com\ 替换为 docker-ce
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
#命令3 将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,执行这个命令可以提升yum安装的速度
yum makecache fast
3.4 安装docker-ce版本
yum install -y docker-ce
看到完毕字样即安装成功!
3.5 拓展
# ubuntu下docker官方安装教程
https://docs.docker.com/engine/install/ubuntu/
ubuntu
下docker
的安装和CentOS
是不一样的,官网步骤写的很清楚。
如果想要今后版本更新了,安装方式有变化时,按官网上的教程来肯定是不会错的。
四、启动Docker
4.1 关于端口
Docker
应用需要用到各种端口
- 企业中选择逐一去修改防火墙设置。
# 开放某个端口 这里以8080为例
firewall-cmd --zone=public --add-port=8080/tcp --permanent
# 重启防火墙,让刚开开放的端口生效
firewall-cmd --reload
# 查看已经开放的端口列表
firewall-cmd --zone=public --list-ports
- 个人学习可以选择直接关闭防火墙,这样任何端口就都被开放了。
# 关闭防火墙
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
# 如果以后又想开启防火墙了可以使用如下命令让防火墙开机自启,运行完后重启生效
systemctl enable firewalld
4.2 Docker启动命令
systemctl start docker # 启动docker服务
systemctl stop docker # 停止docker服务
systemctl restart docker # 重启docker服务
systemctl status docker # 查看docker状态
systemctl enable docker # 开机自启docker
docker info # 查看docker概要信息
4.3 查看docker版本
docker -v
只要能正确显示当前的Docker
版本就说明Docker
安装成功!
4.4 帮助命令
# 查看docker总体帮助文档:
docker --help
# 查看docker命令帮助文档:
docker 具体命令 --help
4.5 配置docker的阿里云镜像加速
阿里云镜像加速官方文档:
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在CentOS
栏目下得知配置镜像加速器。
针对Docker
客户端版本大于 1.10.0 的用户。
可以通过修改daemon
配置文件/etc/docker/daemon.json
来使用加速器。
# 在etc目录下创建一个docker目录
sudo mkdir -p /etc/docker
# 在/etc/docke文件新建/daemon.json,并把 EOF之间的内容写到daemon.json中去
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://pi7aby9g.mirror.aliyuncs.com"]
}
EOF
# 重新加载daemon.json文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116498.html