目录
一、Docker 概述
1、什么时Docker
2、Docker的设计宗旨
4、Docker的优点
5、Docker容器和虚拟机的区别
6、 namespace的隔离(命名空间)
7、 Docker的三个核心概念
7.1 镜像
7.2 容器
7.3 仓库(Docker Hapu)
二、Docker安装
1、关闭防火墙
2、安装依赖包
3、设置阿里云镜像
4、安装Docker-CE社区版并设置为开机自启动
5、查看Docker信息
6、设置镜像加速
6.1 申请加速地址
6.2 实现加速操作
三、一键安装部署docker
一、Docker 概述
1、什么时Docker
- Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源。
- Docker是在Linux容器里运行应用的开源工具,是一种轻量级的“虚拟机”。
- Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器。
总结
容器:提供在多台主机上运行程序相同的运行环境.
docker容器可以看做运行在宿主机上的一个进程,容器共享宿主机的内核,容器间是通过namespace(命令空间)隔离资源,通过cgroups(资源配额)去限制资源。
2、Docker的设计宗旨
Docker 的Logo设计为蓝色鲸鱼,拖着许多集装箱,鲸鱼可以看作为宿主机,集装箱可以理解为相互隔离的容器,每个集装箱中都包含自己的应用程序。
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere,即通过对应用组件的封装,发布、部署、运行等生命周期的管理,达到应用组件级别的 一次封装,到处运行的 目的。这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统。
4、Docker的优点
- 灵活: 即使是复杂的应用也可以集装箱化
- 轻量级: 容器利用并共享主机内核
- 可互换: 可以及时部署更新和升级
- 便捷式: 可以在本机构建,部署到云,并在任何地方运行
- 可扩展: 可以增加并自动分发容器副本
- 可堆叠: 可以垂直和及时堆叠服务
容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。
虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。
5、Docker容器和虚拟机的区别
- 与虚拟机相比,容器资源损耗要小
- 同样的宿主机下,能够建立容器的数量要比虚拟机多
- 但是,虚拟机的安全性要比容器稍好,要从虚拟机攻破到宿主机或其它虚拟机,需要先攻破Hypervisor层,这是极其困难的。
- 而Docker容器与宿主机共享概念股内核,文件系统等资源,更有可能对其它容器、宿主机产生影响。
特性(不同点) | Docker容器 | 虚拟机 |
---|---|---|
部署难度 | 非常简单 | 组件多,部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统一致(共享内核) | VM会占用部分资源(50%损耗) |
镜像体积(磁盘占用) | MB级别 | GB级别 |
管理效率 | 简单 | 各组件相互依赖,管理复杂 |
可管理性 | 单进程 | 完整的系统管理 |
网络连接 | 弱 | 借助neutron可以灵活组件各类网络管理 |
系统支持量(单机) | 上千个 | 几十个 |
隔离性 | 进程级别 | 系统级别 |
封装程度 | 直达包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
6、 namespace的隔离(命名空间)
docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术(copy-on-write)实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)。
namespace | 系统调用参数 | 隔离内容(判断两个环境是否完全隔离) |
---|---|---|
utc | CLONE_NEWUTS | 主机名与域名(同一个环境里不能叫node1又叫node2) |
ipc | CLONE_NEWWIPC | 信号量、消息队列和共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间) |
pid | CLONE_NEWPID | 进程编号 |
network | CLONE_NEWNET | 网络设备、网格栈、端口等 |
mount | CLONE_NEWNS | 挂载点(文件系统,不能重复挂载一个指定目录) |
user | CLONE_NEWUSER | 用户和组(3.8以后的内核才支持) |
7、 Docker的三个核心概念
7.1 镜像
- Docker的镜像是创建容器基础, 类似虚拟机的快照,可以理解为一个面向Docker容器的引擎的只读模板。
- 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行程序所需要的所有内容,包含代码、运行时间、库、环境变量和配置文件
- Docker镜像也是一个压缩包,只是这个压缩包不只是可执行文件,环境部署脚本,它还包含了完整的操作系统。因为大部分的镜像都是基于某个操作系统来构建的,所有很轻松的就可以构建本地和远程一样的环境,这也是docker镜像的精髓
7.2 容器
- Docker的容器创建的运行实例,它可以被启动、停止、和删除,所创建的每一个容器都是相互隔离,互不可见的,以保证平台的安全性。
- 可以把容器看做一个简易版linux环境(包括root用户权限,镜像空间、用户空间和网络空间)和运行在其它的应用程序。
7.3 仓库(Docker Hapu)
公共仓库:docker hub
私有仓库:harhor
- Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库或私有仓库,当下次要在另外一台机器上使用这个镜像时,只需要从仓库获取。
- Docker的镜像、容器、日志等全部内容都默认存储在/var/lib/docker目录下。
二、Docker安装
1、关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
2、安装依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2#解释
yum-utils #提供了yum-config-manager工具
device mapper #是linux内核中支持逻辑卷管理的通用设备映射机制,它为了实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
#device mapper存储驱动程序需要device-mapper-persistent-data和lvm2.
3、设置阿里云镜像
cd /etc/yum.repos.dyum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装Docker-CE社区版并设置为开机自启动
开源社区(免费版):docker-ce
企业版(收费):docker-ee
yum -y install docker-cesystemctl start docker.service
systemctl enable docker.service#安装好的Docker系统有两个程序,Dcoker服务端和docker客户端,
-1、其中docker服务端是一个服务进程,负责管理所有容器。
-2、Docker客户端则扮演Docker服务端的远侧还能够控制器,可以用来控制Docker的服务进程,大部分情况下Docker服务端和客户端运行在一台机器上。
5、查看Docker信息
docker version
6、设置镜像加速
6.1 申请加速地址
#第一种进入方法
进入阿里云的官方账号,点击控制台,搜索容器镜像后点击容器镜像服务#第二种进入方法
https://help.aliyun.com/document_detail/60750.html#进入之后,登录阿里云账号即可获取加速度地址,复制配置镜像加速器的操作。
6.2 实现加速操作
三、一键安装部署docker
#!/bin/bash#关闭防火墙
systemctl stop firewalld
setenforce 0#安装依赖包
yum -y install yum-utils device-mapper-persistent-data lvm2#设置阿里云镜像
cd /etc/yum.repos.d
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#开始安装docker
yum -y install docker-ce#启动docker
systemctl start docker
systemctl enable docker#设置镜像加速(最好用自己的)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://i2q96v0n.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker#网络优化
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf
sysctl -p
systemctl restart network