Docker第一招

一、Docker概述

1.1、docker是什么?

●是一种轻量级的“虚拟机”
●在Linux容器里运行应用的开源工具

1.2、Docker的使用场景

●打包应用程序简化部署
●可脱离底层硬件任意迁移
●例:服务器从腾讯云迁移到阿里云

1.3、docker的产生背景

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

1.4、实现应用A和应用B隔离

应用A与应用B隔离,在操作系统中,是通过namespaces(名称空间、命名空间)实现的,只要实现以下6个空间隔离,才能认为两个立用实现了完全/完整隔离

容器隔离了6个名称空间(namespace资源隔离-用容器化技术封装)⭐⭐⭐⭐⭐
mount     文件系统,挂载点_—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mnt
user      操作进程的用户和用户组
pid       进程编号
uts       主机名和主机域
ipc       信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net       网络设备、网络协议栈、端口等

cgroups linux内核态中资源管理的模块
cgroups管理一些系统资源

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

docker 引擎对内核版本是有要求的(至少是3.8+)
docker需要cgroups 的资源管理功能

最晚的一个名称空间,3.8

1.5、docker的定义

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

小结: Dcoker是基于容器技术的轻量级虚拟化解决方案
docker是⭐⭐容器引擎,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、 api等)c/s

cgroup和namespaces两者构成了docker底层原理出⭐⭐⭐⭐

1.6、docker有哪些优势

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

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

1.7、docker的使用场景

K8S image镜像+container容器的方式
war jar—》github gitlab私有仓库(代码仓库)—》jenkins(测试)(应用程序封装/构建镜像)—》运维下载,使用容器技术进行运行/发布打包应用程序简单部署
可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云持续集成和持续交付(CI/CD) :开发到测试发布
部署微服务
提供PAAs产品(平台即服务){OpenStack的云主机类似于阿里云的EcS,属于IAAS、Docker(K8s)属于PAAS}

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

1.8、Docker引擎(Docker Engine)

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

二、docker的架构

Docker使用客户端-服务器架构。Docker 客户端与Docker
守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。

Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快

Docker client:客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能〉的docker

Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。
Docker daemon:守护进程

Docker守护程序(dockerd)侦听Docker
API请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理pocker服务。Docker images:镜像

容器可以被打包成镜像
Docker container:容器
Docker registry:镜像仓库

存储镜像的地方,默认在公共的Docker Hub上查找,可以搞个人仓库(两种分别是registry,harbor)

2.1、docker三大组件

镜像:
一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
容器:
基于镜像的一种运行时状态
仓库:
存放image 镜像,仓库大类:
1、公共仓库—》docker hub
2、私有仓库registry harbor(上传下载方便安全)

2.2、docker和VM的区别⭐⭐⭐⭐⭐

不同点                        container                     VM
启动速度                      秒级(进程控制)                  分钟级(来宾操作系统管理)
运行性能                      接近原生(直接在内核中运行90%)     50%左右损失
磁盘占用                      MB                            GB(操作系统镜像2G)
数量                         成百上千(进程)                 一般几十台(操作系统级别)
隔离性                       进程级别                        系统级别(更彻底)
操作系统                     主要支持Linux(只需要支持引擎)      几乎所有(吃宿主机操作系统的支持)
封装程度               只打包项目代码和依赖关系,共享宿主机内核     完整的操作系统,与宿主机隔离

2.3、docker 和 vm 解决了虚拟机的什么问题:

vm :
docker 解决了vm的一个环境孤岛的问题
docker可以自定义传参(创建-创建镜像/容器、启动(基于镜像启动)之前)

2.4、控制组(control groups)

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

三、部署20版docker

1、下载和基本配置

 安装依赖包
 yum install -y yum-utils device-mapper-persistent-data 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 stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

启动docker
systemctl start docker
systemctl enable docker

2、设置镜像加速

加速器地址
https://0o49rmog.mirror.aliyuncs.com

 设置镜像加速
 sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://0o49rmog.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

3、网络优化

vim /etc/sysctl.conf
net.ipv4.ip_forward=1
[root@docker yum.repos.d]# sysctl -p
net.ipv4.ip_forward = 1
systemctl restart network
systemctl restart docker

在这里插入图片描述
在这里插入图片描述
查看命令
在这里插入图片描述

docker-server端配置文件

{
"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的网络建议和宿主机的IP"对照"
比如宿主机10.2.5.6 容器的地址就可以修改为172.5.6.1,这样方便在故障发生时,更容易定位故障节点位置
systemctl daemon -reload
systemctl restart docker

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值