Docker基本原理及镜像管理

目录

一、Docker简介

二、Docker的组成

三、Docker容器与虚拟机的区别

四、Docker核心概念

五、安装Docker

1、yum安装Docker

2、查看docker信息

六、Docker的镜像管理命令 

七、镜像管理命令总结


一、Docker简介

       Docker是基于Linux内核实现的, Docker最早采用了LXC技术, LXC是Linux原生支持的容器技术, 可以提供轻量级的虚拟化. Docker基于LXC发展, 提供了LXC的高级封装, 标准的配置方法, 在LXC的基础上, Docker提供了一系列更强大的功能. 而虚拟化技术, 比如KVM, 是基于模块实现, 后来Docker改为自己研发并开源的runc技术运行容器。

       Docker相比虚拟机的交付速度更快, 资源消耗更低, Docker采用客户端/服务器端架构, 使用远程API来管理和创建容器, 其可以轻松的创建一个轻量级的, 可移植的, 自给自足的容器. Docker的三大理念就是build, ship, run. Docker通过namespace和cgroup来提供容器的资源隔离与安全保障等, 所以Docker容器在运行时, 不需要类似虚拟机的额外资源开销, 因此可以大幅度提供资源利用率。

二、Docker的组成

Docker 主机(host):一个物理机或虚拟机,用于运行Docker服务进程或容器
Docker 服务端(server):Docker守护进程,运行docker容器
Docker 客户端(client):客户端使用Docker命令或其他工具调用docker API
Docker 仓库(registry):保存镜像的仓库,类似于git或SVN这样的版本控制系统
Docker 容器(container):容器是从镜像生成对外提供服务的一个或一组服务

三、Docker容器与虚拟机的区别

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用共他任何可执行文件的内存,非常轻量。

虚拟机运行的是一个完整的操作系统,每个虚拟机使用独立的内核,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

使用类型 功能 KVM虚拟机 Docker容器 Docker容器的提升
CPU利用率 利用率低且不均 利用率高、均匀 提高了CPU的利用率
硬盘空间占用 20G ~ 200G 150M ~ 300M 极大降低了硬盘空间的占用,避免了空间浪费
内存占用 共享2G ~ 32G内存 根据服务占用内存 避免了内存不足的问题
服务器支持数量 20个左右 1000+ 降低成本
启动速度 以分钟计量,较慢,主要是操作系统启动较为耗时 以秒计量,其启动速度就是启动一个进程的时间 遇到问题可快速重启或者回滚
项目延伸 拓展项目 需要重新部署虚拟机,过程复杂 通过云平台扩容,比较方便 扩容方便、快捷
新上线项目 开发、测试、生产环境很难实现同步,容易出现问题 能够实现所有环境统一标准,不再依赖操作系统和软件库 效率大幅度上升
特性 Docker容器 虚拟机
内核的使用 共享内核 独立内核
启动速度 秒级(相当于启动一个进程) 分钟级(启动操作系统)
计算能力损耗 几乎无 损耗 50%左右
性能 接近原生 弱于
系统支持量(单机) 上千个 几十个
隔离性 资源隔离/限制 完全隔离(因为是独立的操作系统)
操作系统 主要支持Linux 几乎所有(KVM)
封装程度 只打包项目代码和依赖关系,共享宿主机内核 完整的操作系统,与宿主机隔离
  • docker就相当于宿主机的一个进程,所以损耗微乎其微
  • 虚拟机和操作系统之间是hypervisor,虚拟化管理程序,虚拟化各种硬件资源,这中间就会有资源损耗

四、Docker核心概念

1)镜像

  • Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。
  • 通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。

2)容器

  • Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
  • 可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

3)仓库

  • Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
  • Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。

五、安装Docker

1、yum安装Docker

关闭防火墙和selinux

安装依赖包

yum install -y yum-utils 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

systemctl start docker.service
systemctl enable docker.service

2、查看docker信息

查看docker版本信息

docker信息查看

六、Docker的镜像管理命令 

搜索镜像

格式:docker search 关键字(镜像名称或仓库名)
 ​
docker search nginx        #搜索nginx的镜像
 ​
docker search clearlinux   #搜索指定仓库clearlinux中的镜像

获取镜像(下载镜像)

格式:docker pull 镜像名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 的镜像。
 ​
docker pull nginx   #下载nginx镜像

查看本地有哪些镜像

#查看下载到本地的所有镜像
docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
nginx        latest    3964ce7b8458   32 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 3964ce7b8458

为本地的镜像添加新的标签

添加标签后,镜像的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

存出镜像:将镜像保存成为本地文件

将镜像保存成为本地文件,实际是将镜像打包成一个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.80.3:/root/
 ​
#主机B将镜像文件导入到镜像库中 
docker load < mynginx.tar  或者   docker load -i mynginx.tar 

上传镜像(将镜像上传到官方仓库)

默认上传到 docker Hub 官方公共仓库,需要注册使用公共仓库的账号

docker tag nginx:latest ttusuzuka/nginx  #添加新的标签,在镜像名称前加上仓库名,ttsuzuka为仓库名称
 ​
docker login            #登录公共仓库
Username:  #账号
password:  #密码
 ​
docker push ttsuzuka/nginx     #上传镜像
docker search ttsuzuka         #搜索ttsuzuka仓库中的镜像
docker pull ttsuzuka/nginx     #下载ttsuzuka仓库中的镜像

 

七、镜像管理命令总结

命令 作用
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

猜你喜欢

转载自blog.csdn.net/TTSuzuka/article/details/128332814