Docker相关概念与安装(Docker-CE)

Posted IHBOS

tags:

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

Docker相关概念与安装

一、背景

  • 以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务例如: pid=2 ——> python pid=3——>java pid4——>php ,三个服务可能会相互影响
  • 使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本
  • 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环域随着技术发展——>虚拟化技术开销较大(例如:只要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统.
    并不方便/合理)
  • ——>延伸出容器技术
    虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销

二、那如何实现应用和应用的隔离

应用和应用的隔离,如何进行判断

  • 以操作系统维度
  • 应用与应用隔离,在操作系统中,是通过namespaces实现的,只要实现以下6个空间隔离,才能认为两个应用实现了隔离

容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)

  • mount:文件系统,挂载点——>一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
  • user:操作进程的用户和用户组
  • ipc:信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
  • net:网络设备、网络协议栈、端口等

该pid命名空间:进程隔离(PID:进程ID) 。
该net命名空间:管理网络接口(NET:网络)。
该ipc命名空间:管理访问IPC资源(IPC:进程间通信)。
该mnt命名空间:管理文件系统挂载点(MNT:mount) 。
该uts命名空间:隔离内核和版本标识符。(UTS: Unix时间共享系统)。

三、Docker是什么?

  • Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件是一个开源的应用容器引擎,让开发者可以打包方式封装应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或者windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制(隔离机制),相互之间不会有任何接口
    注:沙箱(Sandbox):在计算机安全领域,沙箱是一种程序的隔离运行机制
  • Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词。
  • Docker从一开始就以提供标准化的运行时环境为目标,真正做到"build once,run anywhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦(不吃操作系统)。在此基础上还进一步发展出了Caas(容器即服务)技术。
  • Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

小结: Dcoker是基于容器技术的轻量级虚拟化解决方案

  • docker是容器引擎,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、 api等)
    cgroup :资源管理技术

四、Docker有哪些优势?和虚拟化比有什么优势

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

使用docker有什么意义

  • docker引擎统一了基础设施环境-docker环境—》image —》封装一个简易的操作系统
  • docker引擎统一了程序打包(装箱)方式-docker镜像—》images
  • docker引擎统一了程序部署(运行)方式-docker 容器——》基于镜像——》运行为容器(可运行的环境)
  • 要求:内核在3.8以上(排除了centos6)
  • docker 1.30版本迭代docker-ce docker-ee 1.7版本因为企业版和社区版
特性Docker容器虚拟机
启动速度秒级分钟级
计算能力损耗几乎无损耗50%左右
性能接近原生弱于
系统支持量(单机)上千个几十个
隔离性资源隔离/限制完全隔离

五、Docker的使用场景

  • 应用程序(封装/构建镜像)——》运维下载,使用容器技术进行运行/发布
  • 打包应用程序简单部署
  • 可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
  • 持续集成和持续交付(cI/CD) :开发到测试发布
  • 部署微服务
  • 提供PAAs产品(平台即服务)OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker (KBS)属于PAAS

六、Docker引擎(Docker Engine)

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

七、Docker的核心概念

镜像

  • 一个面向Docker容器引擎的只读模板(简而言之,就是将一个服务已经部署完毕的环境打包)

容器

  • 根据镜像创建的运行实例(即虚拟机)

仓库

  • 集中保存镜像的地方(分为公有仓库和私有仓库,公有仓库就是Docker官方仓库)

八、使用YUM仓库安装Docker

安装依赖包

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

yum-utils提供了yum-config-manager
device mapper存储驱动程序需要device-mapper-persistent-data和lvm2
Device Mapper 是Linux2.6内核中支持逻辑卷管理的通用设备映射机制,它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。

设置阿里云镜像源

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

安装Docker-CE

yum install -y docker-ce
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
systemctl start docker.service 
systemctl enable docker.service


镜像加速
镜像加速地址

可选项:配置文件修改(生产经验)
#registry-mirrors 以上添加
  "graph":"/data/docker",		#数据目录
  "storage-driver":"overlay2",	#存储引擎
  "insecure-registries":["registry.access.redhat.com","quary.io"],	#私有仓库
#registry-mirrors                    #镜像加速
  "bip":"172.168.50.1/24",		#docker网络
  "exec-opts":["native.cgroupdriver-systemd"],	#启动时的额外参数
  "live-restore":true			#当docker容器引擎挂掉的时候,使用docker跑起来的容器还能继续运行

以上是建议的配置项
docker容器网络生产经验
docker 的网络建议和宿主机的IP"对照”
比如宿主机 10.2.5.6容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置
systemctl daemon-reload
systemctl restart docker

systemctl daemon-reload 
systemctl restart docker


网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service network restart
systemctl restart docker


以上是关于Docker相关概念与安装(Docker-CE)的主要内容,如果未能解决你的问题,请参考以下文章

docker 安装与使用相关

安装docker-ce与卸载(centos 7)

CentOS7中Docker-ce的卸载和安装

docker-ce安装与搭建私有仓库

centos7 安装docker-ce ,最新版本docker

docker-ce的安装与升级