您好,我是码农飞哥,本篇文章是Ceph实战专栏的第二篇文章,本文首先会简单介绍一下Docker的基本概念,接下来会介绍在CentOS 7上部署docker,最后会介绍一下Docker的一些常用命令。
系列文章目录
Ceph实战(一):Ceph是什么?能做什么?有何优点Ceph实战(二):用docker搭建Ceph集群之docker的基本概念以及操作
Ceph实战(三):用docker搭建Ceph集群(nautilus)
Ceph实战(四):用docker搭建Ceph集群问题整理(基于nautilus版本)
Ceph实战(五):Ceph的块设备的安装以及基本概念(基于nautilus版本)
Ceph实战(六):Ceph文件系统的基本概念,使用以及特点(基于nautilus版本)
Ceph实战(七):Ceph对象存储的基本概念,使用以及优点(基于nautilus版本)
Ceph实战(八):Ceph对象存储的Amazon S3接口的使用(!重点介绍分片上传接口)(基于nautilus版本))
Ceph实战(九):Ceph的核心组件的介绍(基于nautilus版本)
Ceph实战(十):Pool与PG的说明以及Ceph的IO流程
文章目录
- 系列文章目录
- Docker的基本概念
- 什么是容器
- 容器虚拟化和KVM虚拟化的区别
- Docker相对vm的优点
- 缺点
- Docker的介绍
- Docker的组成
- Docker的安装
- Docker应用场景
- 场景一:节省项目环境部署时间
- 场景二:环境一致性
- 场景三:包和版本管理;
- 场景四:微服务
- Docker的常用命令
- 杀掉docker下所有进程并删除容器
- 修改docker的配置文件
- 测试docker是否启动成功
- 查看容器是否运行
- 发现容器不是up状态,想找下原因,查看日志:
- 容器启动了,我想进去耍耍
- 不想玩了,我想退出容器(不会杀死容器)
- 查看容器的详细信息
- 查看容器占用了多少资源
- 装载容器镜像(.tar)
- 保存容器镜像
- 镜像相关的知识点
- 1.查看有哪些镜像
- 2.如何查看镜像的详细信息
- 3.给镜像打tags
- 4. 将镜像上传到我的私人仓库
- 5.搭建一个私人镜像仓库
- 6.删除镜像
- 7. 镜像重命名
- 总结
- 参考
Docker的基本概念
什么是容器
容器是一种工具,指的是可以装下其他物品的工具,比如生活中的柜子,箱子等都可以成为一个容器。具体到软件中的容器,就是在隔离的环境下运行的一个进程,如果进程停止了,容器就会销毁。隔离的环境中拥有自己的系统文件,IP地址, 主机名等。容器是完全的沙箱环境,相互之间不会有任何接口。
说完容器之后,让我们思考一下,容器跟虚拟机有啥区别呢?
容器虚拟化和KVM虚拟化的区别
- KVM虚拟化:需要硬件的支持(首先安装Hypervisor (vmware、KVM、hyperv)上),需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
- 不需要硬件的支持,不需要模拟硬件(在系统上直接安装Docker Engine,然后直接安装docker,没有Hypervisor),共用宿主机的内核,启动时间秒级(没有开机启动流程)
Docker相对vm的优点
- 占用更少的资源,一台机器可以跑上千个docker容器
- 轻量级、快速启停,秒级实现
- 更快的交付和部署,一次创建和配置后,可以在任意地方运行。
- 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
- 易迁移,平台依赖性不强
缺点
- 隔离性不如VM
- 网络配置受限,打通网络想都别想
Docker的介绍
Docker是一种软件的打包技术,用于创建,管理和编排容器:
- 构建:做一个docker镜像
- 运输:docker pull
- 运行:启动一个容器
每一个容器, 他都有自己的系统文件rootfs。
KVM解决了硬件和操作系统之间的依赖
KVM独立的虚拟磁盘,XML配置文件
docker解决了软件和操作系统环境之间的依赖,能够使应用程序可以在几乎任何地方以相同的方式运行(一次构建,处处运行)。开发人员可以在自己笔记本上创建并测试好容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘IO等)容器的资源隔离与安全保障等,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
namespace 资源隔离
cgroups 进程的资源限制
kvm 虚拟磁盘文件,资源隔离
kvm 资源限制,–cpus --memory
Docker的组成
一个完整的Docker有六个组成部分。
- Docker主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器。
- Docker Client客户端:客户端使用Docker命令或其他工具调用Docker API。
- Docker Daemon守护进程:Docker守护进程,运行docker容器。
- Docker Image镜像:镜像可以理解为创建实例使用的模板。
- Docker Container容器: 容器是从镜像生成对外提供服务的一个或一组服务。
- Docker仓库(Registry):保存镜像的仓库:类似于git或svn这样的版本控制系统,官方仓库: https://hub.docker.com/
下面是Docker组成的示意图:
如果把Docker跟面向对象做一个比较,那么镜像是静态的定义,对应与面向对象里的类,容器是镜像运行时的实体。对应于面向对象里的对象。容器可以被创建、启动、停止、删除、暂停等。
Docker的安装
1.卸载原有版本:
2.安装依赖包:
3.配置YUM源:
4.安装Docker,为避免版本兼容性问题,这里指定版本;
5.启动Docker
6.设置Docker自启动
7.配置镜像加速器
- 重启Docker daemon守护进程
9.重启Docker
- 重启镜像
- 查看docker的版本
Docker应用场景
场景一:节省项目环境部署时间
每次部署项目到测试、生产等环境,都要部署一大堆的依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。Docker主要理念就是环境打包部署,可以在任意Docker Engine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建,到处运行。
场景二:环境一致性
Docker将项目环境打包成镜像,可以在任何Docker Engine上浪,此时Docker就是我们这些项目的基石,Docker可移植性,保持运行状态一致性。
场景三:包和版本管理;
Docker学习了git的模式,仿照github,衍生出了dockerhub,即镜像仓库,同时还可以有自己的私有仓库,仓库的运用,是docker在cd过程中的一大优势。
场景四:微服务
微服务是尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统,Docker的容器的设计原则:一个容器一个服务,容器之间相互隔离,不妨碍想一下,如果容器作为这些独立服务的部署单元,是不是有点恰到好处。
Docker的常用命令
杀掉docker下所有进程并删除容器
修改docker的配置文件
测试docker是否启动成功
查看容器是否运行
查看某个容器是否在运行,docker_name是你要查询的容器名称
发现容器不是up状态,想找下原因,查看日志:
例如:docker logs -f mon
容器启动了,我想进去耍耍
例如:
还可以通过 attch 命令进入容器内部
不想玩了,我想退出容器(不会杀死容器)
查看容器的详细信息
查看容器占用了多少资源
想停止、重启、干掉这个容器
装载容器镜像(.tar)
下面命令就是装载容器镜像 sdf.tar
保存容器镜像
压缩镜像sdf,:base指定版本。压缩后的文件是sdf:base.tar
镜像相关的知识点
1.查看有哪些镜像
2.如何查看镜像的详细信息
3.给镜像打tags
4. 将镜像上传到我的私人仓库
5.搭建一个私人镜像仓库
6.删除镜像
指定要删除的镜像的imageID
7. 镜像重命名
总结
本文首先介绍了容器的基本概念,容器说白了就是隔离环境中的一个进程,容器内的任何操作都不会对宿主机产生影响。接着比较了容器虚拟机与KVM虚拟化的区别。两者最重要的区别是,容器虚拟化不需要硬件支持,不需要安装Hypervisor。而KVM虚拟化则需要。接着就是介绍了Docker的安装以及常用命令。
参考
docker简介与特点