前言

大家好,相信大家都发现最近几年云原生这个词真的火起来了,那么云原生到底是什么意思呢?

云原生以容器、微服务、DevOps,持续交付等技术为基础建立的一套云技术产品体系。这是一种新型技术体系,是云计算未来的发展方向。从1999年到2024年,本地部署和市场云化此消彼长,企业上云的速度随着虚拟化等技术的发展大大加快,未来可能将成为各大企业的一项基础能力。

所以作为一名刚入行或资深的工程师,我觉得都应该对云原生相关的概念和技术了解,提升自己的核心竞争力。

那么接下来就请大家跟随我的脚步,在我的云原生专栏【云原生|从入门到进阶】里学习吧,希望我的文章能对大家有所帮助!


目录

前言

一、什么是 Docker?

二、为啥要用容器?

应⽤容器是个啥样⼦呢?

那为什么不能直接安装⼀个 Redis 呢?

三、Docker Engine是什么?

四、Docker架构

五、Docker安装



一、什么是 Docker?

Docker 的英⽂翻译是“搬运⼯”的意思,他搬运的东⻄就是我们常说的集装箱 Container,Container ⾥⾯装的是任意类型的 App,我们的开发⼈员可以通过 Docker 将App 变成⼀种标准化的、可移植的、⾃管理的组件,我们可以在任何主流的操作系统中开发、调试和运⾏。
从概念上来看 Docker 和我们传统的虚拟机⽐较类似,只是更加轻量级,更加⽅便使用,Docker 和虚拟机最主要的区别有以下⼏点:

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


二、为啥要用容器?

应⽤容器是个啥样⼦呢?

⼀个做好的应⽤容器⻓得就像⼀个装好了⼀组特定应⽤的虚拟机⼀样,⽐如我现在想⽤ Redis,那我就找个装好了 Redis 的容器就可以了,然后运⾏起来,我就能直接使⽤了。 

那为什么不能直接安装⼀个 Redis 呢?

肯定是可⾏的,但是有的时候根据每个⼈电脑的不同,在安装 的时候可能会报出各种各样的错误,万⼀你的机器中毒了,你的电脑挂了,你所有的服务都需要重新 安装。但是有了 Docker 或者说有了容器就不⼀样了,你就相当于有了⼀个可以运⾏起来的虚拟机,只 要你能运⾏容器,Redis 的配置就省了。⽽且如果你想换个电脑,没问题,很简单,直接把容器”端过 来”就可以使⽤容器⾥⾯的服务了。


三、Docker Engine是什么?

Docker Engine 是⼀个C/S架构的应⽤程序,主要包含下⾯⼏个组件:

常驻后台进程 Dockerd
⼀个⽤来和 Dockerd 交互的 REST API Server
 命令⾏ CLI 接⼝,通过和 REST API 进⾏交互(我们经常使⽤的 docker 命令)


四、Docker架构

Docker 使⽤ C/S (客户端/服务器)体系的架构,即Docker 客户端与 Docker 守护进程通信,Docker 守护进程负责构建,运⾏和分发 Docker 容器。

Docker 客户端和守护进程可以在同⼀个系统上运⾏,也可以将 Docker 客户端连接到远程 Docker 守护进程。Docker 客户端和守护进程使⽤ REST API 通过 UNIX 套接字或⽹络接⼝进⾏通信。

①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 底层架构分析。


五、Docker安装

安装直接前往官⽅⽂档选择合适的平台安装即可,⽐如我们这⾥想要在 centos 系统上安装 Docker,这前往地址https://docs.docker.com/install/linux/docker-ce/centos/根据提示安装即可。 安装依赖软件包:

$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 

添加软件仓库,我们这⾥使⽤稳定版 Docker,执⾏下⾯命令添加 yum 仓库地址:
 

$ sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo 

然后直接安装即可:

$ sudo yum install docker-ce 

如果要安装指定的版本,可以使⽤ yum list 列出可⽤的版本:
 

$ yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable 

⽐如这⾥可以安装18.03.0.ce版本:

$ sudo yum install docker-ce-18.03.0.ce 

要启动 Docker 也⾮常简单:
 

$ sudo systemctl enable docker$ sudo systemctl start docker 

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

$ sudo yum install /path/to/package.rpm