Ceph实战(二):用docker搭建Ceph集群之docker的基本概念以及操作

时间:2022-11-14 19:59:15


您好,我是码农飞哥,本篇文章是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虚拟化的区别

  1. KVM虚拟化:需要硬件的支持(首先安装Hypervisor (vmware、KVM、hyperv)上),需要模拟硬件,可以运行不同的操作系统,启动时间分钟级(开机启动流程)
  2. 不需要硬件的支持,不需要模拟硬件(在系统上直接安装Docker Engine,然后直接安装docker,没有Hypervisor),共用宿主机的内核,启动时间秒级(没有开机启动流程)

Docker相对vm的优点

  1. 占用更少的资源,一台机器可以跑上千个docker容器
  2. 轻量级、快速启停,秒级实现
  3. 更快的交付和部署,一次创建和配置后,可以在任意地方运行。
  4. 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率
  5. 易迁移,平台依赖性不强

缺点

  1. 隔离性不如VM
  2. 网络配置受限,打通网络想都别想

Docker的介绍

Docker是一种软件的打包技术,用于创建,管理和编排容器:

  1. 构建:做一个docker镜像
  2. 运输:docker pull
  3. 运行:启动一个容器
    每一个容器, 他都有自己的系统文件rootfs。
    KVM解决了硬件和操作系统之间的依赖
    KVM独立的虚拟磁盘,XML配置文件
    docker解决了软件和操作系统环境之间的依赖,能够使应用程序可以在几乎任何地方以相同的方式运行(一次构建,处处运行)。开发人员可以在自己笔记本上创建并测试好容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。
    Docker是通过内核虚拟化技术(namespaces及cgroups cpu、内存、磁盘IO等)容器的资源隔离与安全保障等,所以Docker容器在运行时,不需要类似虚拟机(VM)额外的操作系统开销,提高资源利用率。
    namespace 资源隔离
    cgroups 进程的资源限制
    kvm 虚拟磁盘文件,资源隔离
    kvm 资源限制,–cpus --memory

Docker的组成

一个完整的Docker有六个组成部分。

  1. Docker主机(Host):一个物理机或虚拟机,用于运行Docker服务进程和容器。
  2. Docker Client客户端:客户端使用Docker命令或其他工具调用Docker API。
  3. Docker Daemon守护进程:Docker守护进程,运行docker容器。
  4. Docker Image镜像:镜像可以理解为创建实例使用的模板。
  5. Docker Container容器: 容器是从镜像生成对外提供服务的一个或一组服务。
  6. Docker仓库(Registry):保存镜像的仓库:类似于git或svn这样的版本控制系统,官方仓库: https://hub.docker.com/
    下面是Docker组成的示意图:

如果把Docker跟面向对象做一个比较,那么镜像是静态的定义,对应与面向对象里的类,容器是镜像运行时的实体。对应于面向对象里的对象。容器可以被创建、启动、停止、删除、暂停等。

Ceph实战(二):用docker搭建Ceph集群之docker的基本概念以及操作

Docker的安装

1.卸载原有版本:

sudo yum remove docker docker-common docker-selinux docker-engine

2.安装依赖包:

yum -y install yum-utils device-mapper-persistent-data lvm2

3.配置YUM源:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4.安装Docker,为避免版本兼容性问题,这里指定版本;

yum -y install docker-ce-19.03.9

5.启动Docker

systemctl start docker

6.设置Docker自启动

systemctl enable docker

7.配置镜像加速器

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6a6e85x9.mirror.aliyuncs.com"]
}
EOF
  1. 重启Docker daemon守护进程
sudo systemctl daemon-reload

9.重启Docker

sudo systemctl restart docker
  1. 重启镜像
docker restart 镜像名
  1. 查看docker的版本
docker --version

Docker应用场景

场景一:节省项目环境部署时间

每次部署项目到测试、生产等环境,都要部署一大堆的依赖的软件、工具,而且部署期间出现问题几率很大,不经意就花费了很长时间。Docker主要理念就是环境打包部署,可以在任意Docker Engine运行。前期我们只需要将每个项目环境打包到镜像,push到镜像仓库,当有需要部署这个项目时,直接pull镜像启动容器,这个项目就可以访问了!一次构建,到处运行。

场景二:环境一致性

Docker将项目环境打包成镜像,可以在任何Docker Engine上浪,此时Docker就是我们这些项目的基石,Docker可移植性,保持运行状态一致性。

场景三:包和版本管理;

Docker学习了git的模式,仿照github,衍生出了dockerhub,即镜像仓库,同时还可以有自己的私有仓库,仓库的运用,是docker在cd过程中的一大优势。

场景四:微服务

微服务是尽可能细粒度拆分业务程序架构,由多个独立服务组成业务系统,Docker的容器的设计原则:一个容器一个服务,容器之间相互隔离,不妨碍想一下,如果容器作为这些独立服务的部署单元,是不是有点恰到好处。

Docker的常用命令

杀掉docker下所有进程并删除容器

docker kill $(docker ps -q); docker rm -f $(docker ps -a -q)

修改docker的配置文件

vim /etc/systemd/system/multi-user.target.wants/docker.service

测试docker是否启动成功

docker run hello-world

查看容器是否运行

docker ps -a

查看某个容器是否在运行,docker_name是你要查询的容器名称

docker ps -a|grep docker_name

发现容器不是up状态,想找下原因,查看日志:

docker logs -f docker_name

例如:​​docker logs -f mon​

容器启动了,我想进去耍耍

docker exec -i -t docker_name /bin/bash

例如:

docker exec -i -t exp-h5 /bin/bash

还可以通过 attch 命令进入容器内部

docker attach 44fc0f0582d9

不想玩了,我想退出容器(不会杀死容器)

exit 或者 ctrl+D

查看容器的详细信息

docker inspect docker_name

查看容器占用了多少资源

docker stats docker_name

想停止、重启、干掉这个容器

docker stop|restart|rm -f docker_name

装载容器镜像(.tar)

下面命令就是装载容器镜像 sdf.tar

docker load < sdf.tar

保存容器镜像

压缩镜像sdf,:base指定版本。压缩后的文件是sdf:base.tar

docker save > sdf:base.tar  sdf:base

镜像相关的知识点

1.查看有哪些镜像

docker images

2.如何查看镜像的详细信息

docker inspect [REPOSITORY:TAG]  IMAGE ID

3.给镜像打tags

docker tag redis 172.22.67.38:5000/redis

4. 将镜像上传到我的私人仓库

docker push 172.22.67.38:5000/redis
下载用pull,删除用rm,注意,如果镜像正在被某个镜像占用,则删不掉。。你可以-f。。

5.搭建一个私人镜像仓库

docker run -d -p 5000:5000 --restart=always --name registry -v /data/registry/data:/var/lib/registry registry:2

6.删除镜像

指定要删除的镜像的imageID

docker rmi [imageID]
# 如果要删除全部镜像
docker rmi $(docker images -q)

7. 镜像重命名

# 仓库可以不用填
docker tag [imageID] REPOSITORY:TAG(仓库:标签)
#例子
docker tag ca12121bac registry.cn-hangzhou.aliyuncs.com/xxxxxx:1.0

总结

本文首先介绍了容器的基本概念,容器说白了就是隔离环境中的一个进程,容器内的任何操作都不会对宿主机产生影响。接着比较了容器虚拟机与KVM虚拟化的区别。两者最重要的区别是,容器虚拟化不需要硬件支持,不需要安装Hypervisor。而KVM虚拟化则需要。接着就是介绍了Docker的安装以及常用命令。

参考

​​docker简介与特点​​