本文将围绕如下几个方面来揭开docker的面纱:linux
基于Linux而言,docker是在其中运行应用的一款开源工具,能够认为是一种轻量级的虚拟机。docker的logo是一条载着集装箱的鲸鱼(旧版的logo),新版的logo则是直接简化了细节,更改了颜色,以下图。docker
从图片中就能够看出来,docker的建立和开发者们的意图。鲸鱼——宿主机,块状箱——隔离的容器(后面介绍什么是docker容器)。而docker的宗旨:Build、Ship and Run Any APP,Anywhere。具体而言,就是经过对应应用组件的封装、发布、部署、运行等生命周期的管理,从而达到应用组件级别的“一次封装、到处运行”的目的。shell
举个例子就比如本身开发了一款应用软件,但愿它在任何地点,任什么时候间、任何操做系统中均可以使用的时候,就能够将它基于docker来实现。固然,对于docker而言,这个组件能够是一个应用,也能够是一个配置,甚至能够是一个完整的操做系统。json
其实docker的出现对于开发人员是莫大的福音。设想目前或将来基于云平台的应用或软件的开发,脱离了底层的硬件,而使用者须要在任什么时候间、任何地点均可以获取相关的资源,那么docker即可以提供这样的诉求。centos
下面直接给出docker容器与传统虚拟机的比较安全
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
计算机性能损耗 | 几乎不损耗 | 损耗一半左右 |
性能 | 接近原生 | 弱之 |
系统支持量 | 上千个 | 几十个 |
隔离性 | 资源限制 | 彻底隔离 |
docker核心解决的问题是利用容器实现相似VM的功能,从而以更加节省的硬件资源给用户提供更多的计算资源,而且docker操做方便,还能够经过Dockerfile配置文件支持灵活的自动化建立和部署。服务器
接下来看一下Docker与传统虚拟机架构的对比:网络
经过上图发现,虚拟机是在物理资源层面实现的隔离,相对于虚拟机,Docker是基于APP层面实现的隔离,而且省去了虚拟机操做系统,从而节省了一部分的系统资源。架构
Docker守护进程能够直接与主操做系统进行通讯,为各个Docker容器分配资源;它还能够将容器与主操做系统隔离(为了安全),并将各个容器互相隔离。虚拟机启动须要数分钟,而Docker容器能够在数毫秒内启动。因为没有臃肿的从操做系统,Docker能够节省大量的磁盘空间以及其余系统资源。app
简单来讲,虚拟机和docker的区别就在于虚拟机须要经过Hypervisor对硬件资源也进行虚拟化,而docker是直接使用宿主机的硬件资源的,所以虚拟机的隔离性更加完全,而docker的隔离性次之。
能够理解为相似咱们虚拟机中的快照,是建立容器的基础,能够说无镜像,不容器。
基于镜像建立的运行实例,能够被启动、中止和删除。每一个容器之间都是相互隔离、互不可见的。
保存镜像的地方,能够理解为镜像囤积地。能够将本身建立的进行推送到仓库中,方便随时随地拉取使用。
仓库注册服务器(registry)是存放仓库的地方,其中包含了多个仓库,每一个仓库中存放一类镜像,而且使用不一样的标签(tag)来区分。目前最大的公共仓库就是Docker Hub,其中存放了数量庞大的镜像给用户下载使用。
这边补充说明一下docker架构:
Docker使用客户端-服务器架构。Docker 客户端与Docker 守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工做。Docker客户端和守护程序能够 在同一系统上运行,或者您能够将Docker客户端链接到远程Docker守护程序。Docker客户端和守护程序在UNIX套接字或网络接口上使用REST API进行通讯。
架构图示:
基于Linux/Centos7的安装部署流程以下:
操做系统版本:centos7.7
[root@localhost ~]# hostnamectl set-hostname docker [root@localhost ~]# su [root@docker ~]# cat /etc/redhat-release CentOS Linux release 7.7.1908 (Core) [root@docker ~]# systemctl stop firewalld && systemctl disable firewalld Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service. Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service. [root@docker ~]# setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config [root@docker ~]# echo "net.ipv4.ip_forward=1" > /etc/sysctl.conf #开启路由转发 [root@docker ~]# sysctl -p #加载路由转发功能 net.ipv4.ip_forward = 1 [root@docker ~]# systemctl restart network
[root@docker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 ... 更新完毕: lvm2.x86_64 7:2.02.185-2.el7_7.2 做为依赖被升级: device-mapper.x86_64 7:1.02.158-2.el7_7.2 device-mapper-event.x86_64 7:1.02.158-2.el7_7.2 device-mapper-event-libs.x86_64 7:1.02.158-2.el7_7.2 device-mapper-libs.x86_64 7:1.02.158-2.el7_7.2 lvm2-libs.x86_64 7:2.02.185-2.el7_7.2 完毕!
说明:
安装yum-utils软件包是为了提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于存储设备映射必须的两个软件包。
[root@docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 已加载插件:fastestmirror, langpacks adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo [root@docker ~]# ls /etc/yum.repos.d/ #查看是否加入了一个docker源 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo docker-ce.repo
[root@docker ~]# yum install -y docker-ce ... 已安装: docker-ce.x86_64 3:19.03.8-3.el7 做为依赖被安装: container-selinux.noarch 2:2.107-3.el7 containerd.io.x86_64 0:1.2.13-3.1.el7 docker-ce-cli.x86_64 1:19.03.8-3.el7 完毕!
[root@docker ~]# mkdir /etc/docker -p [root@docker ~]# tee /etc/docker/daemon.json <<-'EOF' > { > "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"] > } > EOF { "registry-mirrors": ["https://5m9y9qbl.mirror.aliyuncs.com"] }
说明:tee命令——从标准输入写往文件和标准输出,即把标准输入的数据复制到每个文件FILE, 同时送往标准输出。
六、开启服务,查看版本
[root@docker ~]# systemctl daemon-reload [root@docker ~]# systemctl restart docker.service [root@docker ~]# docker -v Docker version 19.03.8, build afacb8b [root@docker ~]# docker version Client: Docker Engine - Community Version: 19.03.8 API version: 1.40 Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:27:04 2020 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 19.03.8 API version: 1.40 (minimum version 1.12) Go version: go1.12.17 Git commit: afacb8b Built: Wed Mar 11 01:25:42 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.2.13 GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429 runc: Version: 1.0.0-rc10 GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd docker-init: Version: 0.18.0 GitCommit: fec3683
本文主要介绍了docker的做用,将之与传统虚拟机进行特性对比,以及架构层面的对比,接着讲述有关docker的核心三大组成,最终给出基于Linux下Centos7操做系统中docker的安装流程。