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

本文深入介绍了Docker的基本概念,包括容器、虚拟化的区别,并详细阐述了Docker的安装过程和应用场景。此外,还列举了一系列Docker常用命令,帮助读者更好地理解和操作Docker。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您好,我是码农飞哥,本篇文章是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的基本概念

什么是容器

容器是一种工具,指的是可以装下其他物品的工具,比如生活中的柜子,箱子等都可以成为一个容器。具体到软件中的容器,就是在隔离的环境下运行的一个进程,如果进程停止了,容器就会销毁。隔离的环境中拥有自己的系统文件,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跟面向对象做一个比较,那么镜像是静态的定义,对应与面向对象里的类,容器是镜像运行时的实体。对应于面向对象里的对象。容器可以被创建、启动、停止、删除、暂停等。
在这里插入图片描述

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

还可以通过 attach 命令进入容器内部,命令的格式是:

docker attach [OPTIONS] CONTAINER

例如

docker attach 44fc0f0582d9  

官方文档中说attach后可以通过CTRL-C来detach,

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

exit 或者 ctrl+D

查看容器的详细信息

docker inspect docker_name

查看容器占用了多少资源

docker stats docker_name

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

docker stop|restart|rm -f docker_name

镜像相关的知识点

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

8. 装载容器镜像(.tar)

使用load进行从tar文件导出镜像。

docker load < sdf.tar 

导出之后就可以通过docker images 命令进行查看。

9. 保存容器镜像

使用save参数进行打包,格式如:docker save > 镜像文件名.tar 镜像:版本号 比如 压缩镜像是sdf 版本号(tag)是base。压缩后的文件是sdf:base.tar

docker save > sdf:base.tar  sdf:base

10. 修改镜像名和tag

docker tag 【镜像ID】【镜像名称】:【tag版本信息】 

docker tag 8ef375298394 mysql:v5.7

总结

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

参考

docker简介与特点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农飞哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值