详解Docker架构、镜像、容器及资源限制

ぃ、小莉子 提交于 2020-01-02 15:52:08

Docker核心

  • 镜像(Image):类似与虚拟机的镜像,可以将他理解为一个面向Docker引擎的只读模板,包含了文件系统。
  • 容器(Container):类似于一个轻量级的沙箱子(因为Docker是基于Linux内核的虚拟技术,所以消耗资源十分少),Docker利用容器来运行和隔离应用。
  • 仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的场所。

Docker特点

1.简化部署配置 极大提高工作效率。
2.轻量级 可移植。
3.启动和停止可以在秒级实现。
4.节省硬件资源。
5.直接在在操作系统层面上实现的虚拟化

Docker安装

  • 安装依赖包
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 
  • 加速 重载
tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://05vz3np5.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

Docker镜像操作

# docker search cobbler      //搜索关键字cobbler
# docker pull jasonlix/docker-cobbler   //下载搜索出的结果

在这里插入图片描述

  • 查看镜像
# docker images   //查看所有镜像  (也可以单独查询 后面跟仓库名称和标签)
# docker inspect 2211e1f06c4e    //指定ID号查看 详细信息
# docker tag jasonlix/docker-cobbler cobbler:cobbler    //添加新名称  新标签 (图中第三个)
  • 删除镜像
  • 删除之前确保没有被容器使用,若有容器使用需要先删除容器。
# docker rmi cobbler:cobbler  //删除  注:当镜像有多个标签时只是删除标签 
  • 存出镜像和载入镜像
 # docker save -o cobbler jasonlix/docker-cobbler    //将本地镜像存为文件cobbler
# docker load < cobbler     //载入镜像
或者
# docker --input cobller   //载入镜像

Docker容器操作

  • 容器的创建与启动
  • -i:让容器的输入保持打开
  • -t:让Docker分配一个伪终端
  • /bin/bash : 表示启动容器时要运行的命令
# docker create -it jasonlix/docker-cobbler /bin/bash     //创建容器
# docker ps -a    //查看所有容器
# docker start 28f067a17c53       //开启容器
# docker stop 28f067a17c53       //关闭容器

在这里插入图片描述

  • 容器的进入

  • 命令格式:docker exec -it 容器ID/名称 /bin/bash

  • 进入之前需先开启运行这个容器

# docker start 28f067a17c53    //开始运行
# docker exec -it 28f067a17c53 /bin/bash
  • 容器的导入和导出
 将A机器的容器导出
# docker export 28f067a17c53 > cobblertar    //将容器 导出命名为cobblertar   (指定导出容器ID )
在B机器上导入
# cat cobblertar | docker import -cobbler:test    //import导入后 生成镜像名cobbler:标签test
  • 容器的删除

  • 要删除正在运行的容器可以添加 -f 选项强制删除,建议先关闭容器在删除。

# docker rm 28f067a17c53    //删除时指定 ID
  • 后台持续运行容器
# docker run -d jasonlix/docker-cobbler /usr/bin/bash -c "while true;do echo hello;done"

注意:docker run ,等于执行了docker create ,在执行docker start 。就是说:在使用docker run创建容器的时候 如果检查镜像,若没有镜像,会从公共仓库下载,然后在创建容器,运行容器。
#docker run -itd --name c7 --network bridge --ip 192.168.200.132 centos:latest /bin/bash
下载资源 名字c7 网卡桥接 本地IP 镜像仓库centos 最新 latest

Docker资源限制

  • 限制CPU使用速率
  • 在docker中可以通过 –cpu-quota选项限制CPU的使用率,CPU的百分比1000位单位
 # docker run --cpu-quota 20000  容器名   //cpu的使用率限定为20%
  • 多任务按比例分享cpu
  • 当多个容器任务运行时,很难计算CUP的使用率,为了使容器合理的使用CPU资源,可以通过 --cp-share 选项设置CPU按比例共享CPU的资源,这种方式可以实现CPU使用率的动态调整。
# docker run --cpu-shares 1024 容器A
# docker run --cpu-shares 2048 容器B
# docker run --cpu-shares 2048 容器C
  • 限制CPU内核使用
    在docker中可以使用 --cpuset-cpus 选项来使某些程序独CPU内核,以便提高其处理速度,对应的Cgroup配置文件为/sys/fs/cgroup/cpuset/docker/ 容器编号 /cpuset.cpus 。选项后直接跟参数 0 、1 、2 ···· 表示第1个内核,第2个内核,第3个内核 ,与/proc/cpuinfo中的CPU编号(processor)相同。
  • 如果服务器有16个核心,那么CPU编号为0~15,使容器绑定第1 ~4个内核使用
 docker run --cpuset-cpus 0,1,2,3  容器名
  • 对内存使用的限制
    在docker中可以通过docker run -m 命令来限制容器内存使用量,
    例如:限制容器的内存为512M
 docker run -m 512m 容器名
  • 对blkio限制
  • 对容器的读写限制

例如:限制容器的/dev/sda1 的写入ipos为1MB

# docker run --device-write-bps /dev/sda1:1mb centos
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!