docker基础
Posted 袁❈晔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker基础相关的知识,希望对你有一定的参考价值。
docker背景
以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务例如: pid=2 --> python pid=3–>java pid4–>php ,三个服务可能会相互影响
使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本。
延伸出能否将这三种服务分别封装起来——》KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境。
随着技术发展,虚拟化技术开销较大(例如:只要运行一个python脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)
延伸出容器技术;
虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销。
docker引擎对内核版本是有要求的(至少是3.8+)
docker 需要cgroups(Linux内核态中资源管理的模块) 的资源管理功能
如何实现应用之间的隔离
在操作系统中,是通过namespaces(名称空间、命名空间)实现的,只要实现以下6个空间隔离,才能认为两个应用实现了完全/完整隔离。
容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装入
mount 文件系统,挂载点;一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user 操作进程的用户和用户组
pid 进程编号
uts 主机名和主机域
ipc 信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net 网络设备、网络协议栈、端口等pid命名空间:进程隔离(PID:进程ID)。
net命名空间:管理网络接口(NET:网络)。
ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
mnt命名空间:管理文件系统挂载点(MNT:mount) 。
uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)
docker与虚拟化的区别
不同点 | container | vm |
启动速度 | 秒级 | 分钟级 |
运行性能 | 接近原生(直接在内核中运行 90%) | 50%损耗 |
磁盘占用 | MB | GB |
数量 | 成百上千 | 一般几十台 |
隔离性 | 进程级别 | 系统级别(更彻底) |
操作系统 | 主要支持Linux | 几乎所有 |
封装程度 | 只打包项目代码和依赖关系,共享宿主机内核 | 完整的操作系统,与宿主机隔离 |
docker的使用场景
- 打包应用程序简单部署
- 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
- 持续集成和持续交付(CI/CD):开发到测试发布
- 部署微服务
- 提供PAAS产品(平台即服务)OpenStack的云主机类似于阿里云的ECS,属于LAAS、Docker(K8S) 属于PAAS
Docker的优势
- docker引擎统一了基础设施环境:docker环境------》image------>封装一个简易的操作系统(3.0+G)
- docker引擎统一了封装应用(装箱/封装-类比于集装箱)方式:docker镜像一》 images
- docker 引擎统一了运行时环境:docker容器一 》基于镜像——》运行为容器(可运行的环境)实现了一次构建、多次、多处使用
docker引擎(Docker Engine)
Docker Engine是具有以下主要组件的客户端-服务器应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
CLENT端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。
命令行界面(CLI)客户端(docker命令)。
docker的架构(docker architecture)
Docker使用客户端-服务器架构。Docker 客户端与Docker
守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。
Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快
Docker Client:客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能)的工具
Docker客户端( docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker APT。 Docker客户端可以与多个守护程序通信。
Docker daemon:守护进程
Docker 守护程序( dockerd))侦听 Docker API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理pocker服务。
Docker images:镜像
存储镜像的地方,默认在公共的Docker Hub上查找,可以做个人仓库(registry harbor)
容器可以被打包成镜像
Docker container:容器
Docker registry:镜像仓库
存储镜像的地方,默认在公共的Docker Hub上查找,可以做个人仓库(registry harbor)
docker三大组件
镜像:一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
容器:基于镜像的一种运行时状态
仓库:存放image镜像﹐仓库大类: 1、公共仓库—》docker hub 2、私有仓库 registry和harbo
控制组( Control groups)
Linux上的Docker引擎还依赖于另一种称为控制组
( cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许Docker
Engine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。
部署20版docker
安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2 #docker存储驱动,lvm2资源控制的工具
设置阿里云镜像源
cd /etc/ yum.repos.d/
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
systemctl enable docker
配置镜像加速器
阿里云官网免费申请!
网络优化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
systemctl restart network
systemctl restart docker
docker-server端配置文件
"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 的网络建议和宿主机的IP"对照”,这样方便在故障发生时,更容易定位故障节点位置。
以上是关于docker基础的主要内容,如果未能解决你的问题,请参考以下文章