Docker框架结构

Docker的框架结构

Docker框架结构基于docker源码响应的框架

Server与Client

监听端口

一个完整的docker程序,由client和server两个端组成,客户端和服务端都会在本地安装好,在生产环境中,是可以将client和server分离的

docker默认是没有监听端口的,没有监听端口之前是不可以将client和server分离的。所以添加监听端口就可以将server与client分离了

对容器进行磁盘读写速率控制

对容器磁盘读写进行控制

关键词

--blkil-weight:硬盘优先级,谁先使用硬盘
bps/iops:bps是每秒读写的数据量,iops是每秒的io次数
都有利于提升数据读取的速度,要么单次读取数据大,要么读取数据小但是次数多
--device-read-bps:磁盘每秒读取速度
--device-write-bps:磁盘每秒写入速度
--device-read-iops:磁盘每秒io读取速度
--device-write-iops:磁盘每秒io写入速度

控制一

启动一个容器,并限制该容器在磁盘的写入速度为30MB/s

[root@localhost ~]# docker run -it --device-write-bps /dev/sda:30MB centos /bin/bash

使用dd命令测试,发现写入速率为29.9MB/s

对容器进行内存容量控制

对容器内存的限制

内存分为:物理内存和swap内存

关键词

--memory:限制内存的使用容量
--memory-swap:限制内存+swap的大小

启动一个限制内存使用的容器testa,如果不指定--memory-swap的话,默认它的大小和内存一样大

对容器进行cpu的使用控制

控制容器中cpu使用的优先级

默认情况下所有的容器都平等的使用cpu,并没有限制,Docker可以通过内容进行限制

关键词

-c/--cpu-shares:控制cpu优先级
--cpuset-cpus:指定使用哪块cpu

实验环境

将计算机调整为单核cpu,内存4G

实验目的

启动多个容器,指定容器使用cpu的优先级

实验步骤

Docker核心原理---Cgroup

Docker核心原理之—Cgroup

内核中强大的工具cgroup,不仅可以限制被NameSpace隔离起来的资源,还可以为资源设置权重,计算用量等

什么是cgroup

cgroup全称是control groups

control groups:控制组,被整合在了linux内核当中,把进程(tasks)放到组里面,对组设置权限,对进程进行控制。可以理解为用户和组的概念,用户会继承它所在组的权限。

cgroups是linux内核中的机制,这种机制可以根据特定的行为把一系列的任务,子任务整合或者分离,按照资源划分的等级的不同,从而实现资源统一控制的框架,cgroup可以控制、限制、隔离进程所需要的物理资源,包括cpu、内存、IO,为容器虚拟化提供了最基本的保证,是构建docker一系列虚拟化的管理工具

使用ssh管理Docker容器

实验:使用ssh管理docker的容器。

实验要求:

1、ssh可以登录容器

2、在容器内yum 安装httpd并且启动

实验步骤

将docker的centos镜像实例化名为sshd的容器

[root@localhost ~]# docker run -itd --name sshd centos /bin/bash
cd3c512d6cd959263b1c94e19781d7213831aad714a2e962ade7c0adc28c510e

进入容器,并进行安装sshd和启动sshd的相应操作

Docker是如何实现容器隔离的

Docker如何实现隔离

Linxu内核实现Namespace的主要目的是为了实现轻量化的虚拟化,就是为了支持容器

查看隔离

Docker每一个容器中有独立的IP、端口、路由,共有六项隔离

我们通过一个简单的Apache来查看Docker有哪六项隔离

[root@localhost ~]# yum -y install httpd
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# netstat -anpt | grep 80
tcp6      0     0 :::80        :::*         LISTEN      68305/httpd  

可以看到关于80端口的pid是68305,这是重点,接下来就要去看68305这个pid中有哪些东西

Docker两个网络命名空间互通

网络命名空间(Network Namespace)

主机中已经安装并启动docker

创建网络命名空间ns1

ip netns add ns1

将ns1命名空间的本地回环启用(默认是down)

开启之前可以尝试ping回环地址,返回的结果是Network is unreachable网络不可达,就是因为刚创建的ns1命名空间的lo网卡是禁用的,启用即可

ip netns exec ns1 ip link set dev lo up

因为命名空间中只有lo本地回环一块网卡,如果要与本机通信,就必须添加网卡

Docker核心原理

原理相关概念

Namespace命名空间

什么是namespace

Docker的运行和namespace有着密切相关的联系,Docker中每个容器都有自己独立的运行位置

空间:对于我们来讲,一个空间是可以与外界相隔的。就像所谓的平行宇宙,就是好多个宇宙之间,每个宇宙中发生的事情,都不会影响到其他的宇宙。空间也就是这个意思。

再比如:我在北京,你在家乡,如果我想给你一个东西,你是拿不到的,我们之间唯一有影响的就是通过网络来联系,可以聊天,或者发送数据,这个例子更贴合容器的概念

容器在运行时,就是在一个空间内,每个容器就是一个空间

Docker操作逻辑及搭建web

Docker操作逻辑

docker_luoji

当我们使用pull从docker仓库中将镜像下载到本地,也就是可以通过docker images查看到pull到的镜像,下载后,可以通过docker run将镜像启动运行在容器(Contaier)中,就可以对容器进行start/stop/kill...等操作。

当然如图所示的images,也可以进行在本地的备份,通过save保存到本地机器,或者通过load恢复到docker的images中

在公司中,不可能去只是用一个centos镜像,可能会用到nginx等的服务,这里就以nginx为例,最后可以通过docker commit制作一个镜像,可以push到仓库中,供用户下载使用

dockerfile是一种作镜像的技术,在后面的学习中会用到,到时再说

Docker常用命令

查看docker配置信息docker info 镜像管理指令新旧命令暂时兼容(2021-04-19) 搜索镜像docker search 镜像名 # 全网搜索ubuntu镜像 命令格式:docker image [COMMAND] 列出镜像新版命令:docker image ls 旧版命令:docker images 构建镜像docker image build 查看镜像构建历史就是Dock...

安装Docker——镜像加速

logo-docker

Docker的安装

Docker的官网

必须是Centos7版本,最好是7.7的内核,docker目前不支持Centos8

Docker源路径的寻找

点击Get Docker可以查看有关下载Docker的文档

get_docker





正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0