Docker概述
云核算涌现出很多改动传统IT架构和运维方法的新技术,比方虚拟机、容器、微服务、Serverless(无服务),不管这些技术运用在哪些场景,降低成本、提高功率是云服务永久的主题。
1.运转物理机,也称为裸金属
2.虚拟机VM,能够在一台物理机上创立多个虚拟机,并把物理装备分发成多个虚拟装备
- 缺陷:功能损耗大,大约损耗50%
虚拟机常用软件:
VMware workstation(windows)
vm Sphere+ESXI (Windows server)
KVM(linux内核)
3.容器 (常用软件:docker、podman、rocket、container)
- 容器内部自身有一个小型操作体系
4.函数(函数化,代码化)
Docker初始
-
Docker是一个开源的运用容器引擎,基于go言语开发并遵守了apache2.0协议开源。
-
Docker是在Linux容器里运转运用的开源东西,是一种轻量级的“虚拟机”。
-
Docker的容器技术能够在一台主机上轻松为任何运用创立一个轻量级的、可移植的、自给自足的容器。
(Docker是创立容器的东西。运用运转在容器中,每个容器都有共同的运转环境,所以能够在任何主机中运转。即完结“一次封装,处处运转”的意图。)
Docker的Logo:
-
Docker的Logo规划为蓝色鲸鱼,拖着许多集装箱。
-
鲸鱼可看作为宿主机,集装箱可理解为彼此阻隔的容器,每个集装箱中都包括自己的运用程序。
Docker的规划主旨:
Docker的规划主旨:Build,Ship and Run Any App,Anywhere
- 即经过对运用组件的封装、发布、布置、运转等生命周期的办理,达到运用组件等级的“一次封装,处处运转”的意图。这里的组件,既能够是一个运用,也能够是一套服务,甚至是一个完好的操作体系。
- docker是创立容器的东西。运用运转在容器中,每个容器都有共同的运转环境,所以能够在任何主机中运转。即完结“一次封装,处处运转”的意图。
容器的特点
容器化越来越受欢迎,由于容器是:
- 灵敏:即使是最杂乱的运用也能够集装箱化。
- 轻量级:容器运用并同享主机内核。
- 可互换:能够即时布置更新和晋级。
- 便携式:能够在本地构建,布置到云,并在任何当地运转。
- 可扩展:能够增加并主动分发容器副本。
- 可堆叠:能够垂直和即时堆叠服务。
Docker容器与虚拟机的差异
容器是在linux上本机运转,并与其他容器同享主机的内核,它运转的是一个独立的进程,不占用共他任何可执行文件的内存,十分轻量。
虚拟机运转的是一个完好的操作体系,每个虚拟机运用独立的内核,经过虚拟机办理程序对主机资源进行虚拟拜访,相比之下需求的资源更多。
运用类型 | 功用 | KVM虚拟机 | Docker容器 | Docker容器的提高 |
---|---|---|---|---|
日常运维 | CPU运用率 | 运用率低且不均 | 运用率高、均匀 | 提高了CPU的运用率 |
硬盘空间占用 | 20G ~ 200G | 150M ~ 300M | 极大降低了硬盘空间的占用,避免了空间浪费 | |
内存占用 | 同享2G ~ 32G内存 | 根据服务占用内存 | 避免了内存不足的问题 | |
服务器支撑数量 | 20个左右 | 1000+ | 降低成本 | |
发动速度 | 以分钟计量,较慢,主要是操作体系发动较为耗时 | 以秒计量,其发动速度就是发动一个进程的时间 | 遇到问题可快速重启或许回滚 | |
项目延伸 | 拓展项目 | 需求从头布置虚拟机,进程杂乱 | 经过云渠道扩容,比较便利 | 扩容便利、快捷 |
新上线项目 | 开发、测验、生产环境很难完结同步,简单出现问题 | 能够完结一切环境统一标准,不再依靠操作体系和软件库 | 功率大幅度上升 |
特性 | Docker容器 | 虚拟机 |
---|---|---|
内核的运用 | 同享内核 | 独立内核 |
发动速度 | 秒级(相当于发动一个进程) | 分钟级(发动操作体系) |
核算才能损耗 | 简直无 | 损耗 50%左右 |
功能 | 挨近原生 | 弱于 |
体系支撑量(单机) | 上千个 | 几十个 |
阻隔性 | 资源阻隔/约束 | 彻底阻隔(由于是独立的操作体系) |
操作体系 | 主要支撑Linux | 简直一切(KVM) |
封装程度 | 只打包项目代码和依靠联系,同享宿主机内核 | 完好的操作体系,与宿主机阻隔 |
-
docker就相当于宿主机的一个进程,所以损耗微乎其微。
-
虚拟机和操作体系之间是hypervisor,虚拟化办理程序,虚拟化各种硬件资源,这中心就会有资源损耗。
容器在内核中支撑2种重要技术
docker实质就是宿主机的一个进程,docker是经过 namespace 完结资源阻隔,经过 cgroup 完结资源约束(约束硬件资源,约束2个容器彼此之间抢资源),经过写时仿制技术(copy-on-write)完结了高效的文件操作(相似虚拟机的磁盘比方分配500g并不是实际占用物理磁盘500g)。
linux六大namespace(命名空间):
namespace | 体系调用参数 | 阻隔内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 |
IPC | CLONE_NEWWIPS | 信号量,音讯行列和同享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件体系) |
USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支撑) |
Docker中心概念
1)镜像
- Docker的镜像是创立容器的根底,相似虚拟机的快照,能够理解为一个面向 Docker 容器引擎的只读模板。
- 经过镜像发动一个容器,一个镜像是一个可执行的包,其间包括运转运用程序所需求的一切内容包括代码,运转时间,库、环境变量、和装备文件。
2)容器
- Docker的容器是从镜像创立的运转实例,它能够被发动、停止和删去。所创立的每一个容器都是彼此阻隔、互不可见,以保证渠道的安全性。
- 能够把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运转在其间的运用程序。
3)库房
- Docker库房是用来集中保存镜像的当地,当创立了自己的镜像之后,能够运用push指令将它上传到公有库房(Public)或许私有库房(Private)。当下次要在另外一台机器上运用这个镜像时,只需从库房获取。
- Docker 的镜像、容器、日志等内容全部都默许存储在 /var/lib/docker 目录下。
装置Docker
Yum装置Docker
现在 Docker 只能支撑 64 位体系。
Yum装置默许装置最新版别,现在最新版别是2020版别。但工作中不会用这么新的版别,前一个版别是2019版别。
#封闭防火墙和selinux
systemctl stop firewalld.service
setenforce 0
#装置依靠包
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------------------
#yum-utils:供给了 yum-config-manager 东西。
#device mapper: 是Linux内核中支撑逻辑卷办理的通用设备映射机制,
它为完结用于存储资源办理的块设备驱动供给了一个高度模块化的内核架构。
#device mapper存储驱动程序需求 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#装置 Docker-CE并设置为开机主动发动
yum install -y docker-ce #docker-ce-cli、containerd.io 会作为依靠包被装置
systemctl start docker.service
systemctl enable docker.service
检查Docker信息
#检查 docker 版别信息
docker version
#留意:Yum装置默许装置最新版别,现在最新版别是2020版别。但工作中不会用这么新的版别,前一个版别是2019版别。
#docker信息检查
docker info
//检查的部分信息如下:
Client:
Context: default
Debug Mode: false
Plugins:
app: Docker App (Docker Inc., v0.9.1-beta3)
buildx: Docker Buildx (Docker Inc., v0.8.2-docker)
scan: Docker Scan (Docker Inc., v0.17.0)
Server:
Containers: 0 #容器数量
Running: 0
Paused: 0
Stopped: 0
Images: 0 #镜像数量
Server Version: 20.10.17 #server版别
Storage Driver: overlay2 #docker运用的是overlay2 文件驱动
Backing Filesystem: xfs #宿主机上的底层文件体系
Supports d_type: true
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs #cgroups 驱动,默许为cgroupfs,也能够修改为systemd
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: inactive
Docker的镜像办理指令
查找镜像
格局:docker search 关键字(镜像称号或库房名)
docker search nginx #查找nginx的镜像
docker search clearlinux #查找指定库房clearlinux中的镜像
获取镜像(下载镜像)
格局:docker pull 镜像称号[:标签]
#假如下载镜像时不指定标签,则默许会下载库房中最新版别的镜像,即挑选标签为 latest 的镜像。
docker pull nginx #下载nginx镜像
镜像加快下载
浏览器拜访 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 获取镜像加快器装备
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3u6mkfxb.mirror.aliyuncs.com"] #写入自己的加快器地址
}
EOF
systemctl daemon-reload #从头加载
systemctl restart docker #重启docker
docker info #检查是否启用了镜像加快
登录阿里云渠道,获取加快器地址:
装备镜像加快:
检查本地有哪些镜像
镜像下载后存放在 /var/lib/docker
#检查下载到本地的一切镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 55f4b40fe486 13 hours ago 142MB
------------------------------------------------------------------------------------
#注释:
REPOSITORY:镜像归于的库房;
TAG:镜像的标签信息,符号同一个库房中的不同镜像;
IMAGE ID:镜像的仅有ID 号,仅有标识一个镜像;
CREATED:镜像创立时间;
VIRTUAL SIZE:镜像巨细;
------------------------------------------------------------------------------------
#镜像下载后存放在 /var/lib/docker
#检查下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
检查镜像的详细信息( 获取容器/镜像的元数据 )
格局:docker inspect 镜像ID号/容器ID #根据镜像的仅有标识 ID 号,获取镜像详细信息
docker inspect 55f4b40fe486
为本地的镜像增加新的标签
增加标签后,镜像的ID号并不会改动。
格局:docker tag 称号:[标签] [库房名/]称号:[新标签]
示例:
docker tag nginx:latest nginx:web #为nginx镜像增加web标签
docker tag nginx:latest 库房名/nginx:web #为镜像增加库标识,便利上传到官方库房,由于上传镜像时有必要指定库房
docker images | grep nginx
删去镜像
留意:假如该镜像现已被容器运用,正确的做法是先删去依靠该镜像的一切容器,再去删去镜像。
格局:
docker rmi 镜像名:标签 #删去指定标签
docker rmi 镜像ID -f #删去指定镜像
docker rmi nginx:web #删去nginx镜像的web标签
docker rmi ac826143758d #删去镜像,该镜像只要单个标签的情况下
docker rmi 55f4b40fe486 -f #删去镜像,镜像有多个标签时需求加-f
批量删去镜像
docker images #检查本地一切镜像
docker images -q #检查本地有哪些镜像,只显示镜像ID
docker rmi $(docker images -q) -f #批量删去本地一切镜像
存出镜像:将镜像保存成为本地文件
将镜像保存成为本地文件,实际是将镜像打包成一个tar包。
格局:docker save -o 存储文件名 存储的镜像
docker save -o mynginx.tar nginx:latest #打包镜像命名为mynginx.tar存在当时目录下
ls -lh
载入镜像:将镜像文件导入到镜像库中
格局:
docker load < 存出的文件
或许
docker load -i 存出的文件
#主机A经过scp指令将打包好镜像文件传给主机B,主机B将镜像文件导入到docker本地
scp ~/mynginx.tar 192.168.41.45:/root/
#主机B将镜像文件导入到镜像库中
docker load < mynginx.tar 或许 docker load -i mynginx.tar
上传镜像(将镜像上传到官方库房)
默许上传到 docker Hub 官方公共库房,需求注册运用公共库房的账号,hub.docker.com 。默许上传到公有库房,其他人能够下载库房中的镜像。假如想设置成私有库房(仅自己可见),不允许其他人下载,需求付费。
能够运用 docker login
指令来输入用户名、密码和邮箱来完结注册和登录。docker logout
指令进行登出。
在上传镜像之前,还需求先对本地镜像增加新的标签,在镜像称号前加上库房名,然后再运用 docker push
指令进行上传。
docker tag nginx:latest yuji007/nginx #增加新的标签,在镜像称号前加上库房名,yuji007为库房称号
docker login #登录公共库房
Username: #账号
password: #密码
docker push yuji007/nginx #上传镜像
docker search yuji007 #查找yuji007库房中的镜像
docker pull yuji007/nginx #下载yuji007库房中的镜像
总结
1、Docker是什么?精干什么?
Docker是基于go言语开发的开源容器引擎,能够在任何主机上运转容器运用,而且每个容器都是一个轻量级的虚拟机。完结“一次封装,处处运转”的意图。
2、Docker容器与虚拟机的差异:
特性 | Docker容器 | 虚拟机 |
---|---|---|
内核的运用 | 同享内核 | 独立内核 |
发动速度 | 秒级(相当于发动一个进程) | 分钟级(发动操作体系) |
核算才能损耗 | 简直无 | 损耗 50%左右 |
功能 | 挨近原生 | 弱于 |
体系支撑量(单机) | 上千个 | 几十个 |
阻隔性 | 资源阻隔/约束 | 彻底阻隔(由于是独立的操作体系) |
操作体系 | 主要支撑Linux | 简直一切(KVM) |
封装程度 | 只打包项目代码和依靠联系,同享宿主机内核 | 完好的操作体系,与宿主机阻隔 |
- 容器是在linux上本机运转,并与其他容器同享主机的内核,它运转的是一个独立的进程,不占用共他任何可执行文件的内存,十分轻量。
- 虚拟机运转的是一个完好的操作体系,每个虚拟机运用独立的内核,经过虚拟机办理程序对主机资源进行虚拟拜访,相比之下需求的资源更多,会发生资源损耗。
3、 linux六大namespace(命名空间):
namespace | 体系调用参数 | 阻隔内容 |
---|---|---|
UTS | CLONE_NEWUTS | 主机名和域名 |
IPC | CLONE_NEWWIPS | 信号量,音讯行列和同享内存 |
PID | CLONE_NEWPID | 进程编号 |
NETWORK | CLONE_NEWNET | 网络设备,网络栈,端口等 |
MOUNT | CLONE_NEWNS | 挂载点(文件体系) |
USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支撑) |
4、Docker的三大中心概念:
镜像、容器、库房
5、镜像办理指令:
指令 | 效果 |
---|---|
docker search <库房/镜像名> | 查找镜像 |
docker pull <库房/镜像名> | 下载镜像 |
docker images | 检查本地的一切镜像 |
docker images -q | 只显示本地一切镜像的ID号 |
docker inspect <镜像ID/容器ID> | 检查镜像的详细信息( 获取镜像/容器的元数据 ) |
docker tag 称号:[标签] [库房名/]称号:[新标签] | 为本地的镜像增加新的标签 |
docker rmi < 镜像称号:标签> | 删去镜像的某个标签 |
docker rmi <镜像ID> -f | 删去指定镜像 |
docker rmi $(docker images -q) | 删去本地一切镜像 |
docker save -o 镜像文件.tar 镜像称号:标签 | 存出镜像:将镜像保存为本地文件 |
docker load -i[或<] 镜像文件 | 载入镜像:将镜像文件导入到镜像库中 |
docker login | 登录公共库房docker hub |
docker push 库房名/镜像名:标签 | 上传镜像(将镜像上传到官方库房) |
docker logout | 登出docker hub |