Docker

Posted 遙遙背影暖暖流星

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker相关的知识,希望对你有一定的参考价值。

一、 Docker

1、简介

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux机器或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

物理机必须要内核3.8以上才能支持docker

2、特点

  • 服务彼此之间相互独立(服务之间的解耦)
  • 服务可以灵活迁移(Docker引擎 docker-ce)

耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。

解耦就是用数学方法将两种运动分离开来处理问题,常用解耦方法就是忽略或简化对所研究问题影响较小的一种运动,只分析主要的运动。(便于管理,防止数据过多的积累在一个文件中)

3、与虚拟机的区别

虚拟机容量占用大,容器不需要装系统,占用容量小

虚拟机安全,容器不安全(共享内核资源),攻击一个内核,其他全部瘫痪,可隔开,做资源控制

特性虚拟机容器
隔离级别操作系统级进程级
系统策略HypervisorCGroups
系统资源5~15%0~5%
启动时间分钟级秒级
镜像存储GB-TBKB-MB
群集规模上百上万
高可用策略备份、容灾、迁移弹性、负载、动态

4、Docker架构

容器技术的发展可说突飞猛进了,市面上除了 Docker 容器还有 coreos 的 rkt,lxc 等,这么多种容器,是不是需要一个标准呢,不然就太容易乱套了

你可能会说直接把 Docker 作为标准不就好了,但是有这么多相关的容器技术,谁不想吃个好瓜,除此之外,当时的编排的技术也竞争火爆,当时的三主力分别是Docker Swarmkubernetes 以及 mesos。作为原生的 Docker Swarm 自然优势明显,但是 kubernetes 不同意啊,它们觉得调度形式太单一了

因此爆发了容器大战,OCI 也就在此出现。

OCI 是开放的容器标准,轻量级开放的治理结构,目前主要有两个标准,分别是容器运行时标准和容器镜像标准

Docker 的整体架构为 CS 架构,客户端和服务端两部分组成,客户端发送命令,服务端接受处理指令,其通信的方式有多种,即可以通过 Unix 套接字通信,也可以网络链接远程通信

Docker客户端

我们平时通常使用 Docker 命令行的方式和服务端打交道,其实还可以通过 REST API 的方式和 Docker 服务端交互,甚至使用各种预言的 sdkDocker 的服务端交互,美滋滋

Docker服务端

Docker 服务端是 Docker 后台服务的总称。其中 Dockerd 是一个非常重要的后台进程,它负责响应并处理Docker 客户端的请求,然后转化为 Docker 的具体操作

5、docker的使用场景

●打包应用程序简单部署
●可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
●持续集成和持续交付(CI/CD):开发到测试发布
●部署微服务
●提供PAAS产品(平台即服务)OpenStack的云主机类似于阿里云的ECS,属于LAAS、Docker(K8S) 属于PAAS

CI/CD流程:war jar —》github gitlab 私有仓库(代码仓库)—》jenkins(测试(应用程序封装/构建镜像)—》运维下载,使用容器技术进行运行/发布

docker三要素
镜像——》模板
容器——》基于镜像,运行状态/运行时状态
仓库——》存放镜像模板

6、 docker引擎(Docker Engine)

●Docker Engine是具有以下主要组件的客户端-服务器应用程序:
●server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
●CLENT端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
●命令行界面(CLI)客户端(docker命令)。


控制组( Control groups)
Linux上的Docker引擎还依赖于另一种称为控制组
( cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker
Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

7、名称空间

cgroup和namespaces两者构成了docker底层原理:
cgroup(资源管理技术)资源控制与namespaces名称空间结合控制管理了6个名称空间资源(以下)
mount 文件系统,挂载点,一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user  操作进程的用户和用户组
pid   进程编号
uts   主机名和主机域
ipc   信号量、消息队列,共享内存(不同的应用调用内存资源的时候应该使用不同的内存空间)
net   网络设备,网络协议栈,端口等

8、优势总结

docker 把容器化技术做成了标准化平台CAAS (docker统一/指定了容器化技术的标准化平台)

使用docker有什么意义(实现了3个统一)
docker引擎统一了基础设施环境-docker环境构建image封装一个简易的操作系统(3.0+G )
docker引擎统一了程序打包(装箱)方式-docker镜像—》images
docker引擎统一了程序部署(运行)方式-docker容器——》基于镜像-》运行为容器(可运行的环境)
实现了一次构建、多次、多处使用

二、安装docker

1、安装

step 1: 安装必要的一些系统工具

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

Step 2: 添加软件源信息

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

Step 3

sudo sed -i ‘s+download.docker.com+mirrors.aliyun.com/docker-ce+’ /etc/yum.repos.d/docker-ce.repo

Step 4: 更新并安装Docker-CE

sudo yum makecache fast
sudo yum -y install docker-ce

Step 4: 开启Docker服务

sudo service docker start

2、设置加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'

  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
  #自己阿里云账户的下的分配的加速地址
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

3、网络优化

vim /etc/sysctl.conf

net.ipv4.ip_forward=1

docker-server端配置文件
vim /etc/docker/daemon.json


"gragh": "/data/docker"           
"storage-driver": "overlay2",      
"insecure-registries": ["registry.access.redhat.com","quary.io"]
"registry-mirrors": ["https://lq"]
"bip": "172.168.80.50/24",          
"exec-opts": ["native.cgroupdriver=systemd"],
"live-restore": true                



“gragh”: “/data/ docker” 数据目录
“storage-driver”: “overlay2”, 存储引擎LXC-》overlay —》overlay2
“insecure-registries”: [“registry.access.redhat.com”, “quary.io”] 私有仓库
“registry-mirrors”: [ “https:/lq” ] 镜像加速
“bip”: “172.168.80.50/24”, docker网络
“exec-opts” :[ “native.cgroupdriver=systemd” ],启动时候的额外参数(驱动)
“live-restore”: true 当docker容器引擎挂掉的时候,使用docker跑起来的容器还能运行(分离)

三、命令

以上是关于Docker的主要内容,如果未能解决你的问题,请参考以下文章

docker安装和介绍(基于centos 7)

基于Matlab的汽车主动悬架控制器设计与仿真

CC2530 GPIO 控制LED灯

docker——docker资源控制管理

docker命名空间控制组及联合文件系统概念

Docker日志控制