Docker是什么
Docker是一个在2013年开源的应用程序,基于go语言编写的PAAS(Platform as a Service,平台即服务)服务。Docker基于Linux内核实现,最早采用LXC技术(LXC是Linux原生支持的容器技术,可以提供轻量级的虚拟化,可以说docker就是基于LXC发展起来的,提供LXC的高级封装,发展标准的配置方法),而虚拟化技术KVM(Kernel-based Virtual Machine)基于模块实现,Docker后续自己开发并开源runC技术运行容器。
Docker相比虚拟机的交付速度更快,资源消耗更低,Docker采用客户端/服务端架构,使用远程API管理和创建Docker容器,其可以轻松的创建一个轻量级、可移植、自给自足的容器。Docker的三大理念是build(构建)、ship(运输)、run(运行),Docker遵从apache2.0协议,并通过namespaces、cgroups等来提供容器的资源隔离和安全保障等,所以Docker在运行时不需要类似虚拟机(空运行的虚拟机占用物理机6-8%性能)的额外资源开销,因此可以大幅提高资源利用率。
Docker的组成
- Docker主机(Host):一台物理机或虚拟机,用于运行Docker进程和容器。
- Docker服务端(Server):Docker守护进程,运行Docker容器。
- Docker客户端(Client):客户端使用Docker命令或其他工具调用docker API。
- Docker仓库(Registry):保存镜像的仓库,一般一个仓库保存同一服务的不同版本的镜像。
- Docker镜像(Images):镜像可以理解为创建实例使用的模板,镜像是静态的、分层的、只读的。
- Docker容器(Container):容器是从镜像生成对外提供服务的一个或一组服务。
Docker的安装
Docker-ce 阿里云镜像站
-
Step 1: 安装必要的一些系统工具 [root@localhost ~]
-
Step 2: 添加软件源信息 [root@localhost ~]
-
Step 3: 更新并安装Docker-CE [root@localhost ~]
[root@localhost ~]
-
Step 4: 开启Docker服务 [root@localhost ~]
-
Step 5:配置镜像加速器 [root@localhost ~]
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
-
Step 6:拉取Nginx镜像 [root@localhost ~]
[root@localhost ~]
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 822b7ec2aaf2 5 days ago 133MB
-
Step 7:运行Nginx容器 [root@localhost ~]
1fb078fc6dc323b86482d3de4510ab5e0e167ac83187748dae5353d820b74993
[root@localhost ~]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1fb078fc6dc3 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp relaxed_wiles
-
Step 8:测试
Docker对比虚拟机
- 资源利用率更高:一台物理机可以运行数百个容器,但是一般只能运行数十个虚拟机。容器没有单独内核,直接调用宿主机的内核;而虚拟机是有内核的,一个空的虚拟机即使不运行服务也会消耗一定资源。因此使用容器没有中间层的内核做资源转换,相同配置下,运行的容器数量比虚拟机数量要多。
- 开销更小:Docker架构较之于虚拟机更加简单,不需要启动单独的虚拟机占用硬件资源。
- 启动速度更快:可以在数秒内完成启动。
使用虚拟机是为了更好的实现服务运行环境隔离,每个虚拟机都有独立的内核,虚拟化可以实现不同操作系统的虚拟机,但是通常一个虚拟机只运行一个服务,很明显资源利用率比较低而且造成不必要的性能损耗,创建虚拟机的目录是为了运行应用程序(如Nginx、Tomcat等Web程序),使用虚拟机无疑带来不必要的资源开销,但容器技术基于减少中间运行环节,带来较大的性能提升。
|