Docker容器原理详解
Linux部署服务的形式
1. 纯物理机的服务器部署
2. 虚拟化的部署形式
相比纯物理机的部署形式,虚拟机的部署形式解决了哪些问题
- 控制了成本
- 节约了一定的资源
- 迁移和扩展也得到了优化,可以利用虚拟机的模板功能,vmware提供了模板克隆
虚拟化部署的局限性
- 每一个虚拟机都是一个完整的操作系统,要分配系统资源,虚拟机多到一定程度时,操作系统本身的资源也就消耗殆尽,或者说必须扩容。
Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器。Hypervisor是所有虚拟化技术的核心。非中断地支持多工作负载迁移的能力是Hypervisor的基本功能。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
虚拟化技术的应用
云计算技术,将计算的工作放在云上去执行去阿里云购买RDS数据库服务,不需要自己搭建数据库,做数据库高可用等等对数据的增删改查,用的全都是云上的数据库,云计算的技术就是基于kvm虚拟化技术去实现的
常用的虚拟化工具
- VMware workstation(属于个人学习使用),主要用于windows平台(创建虚拟机+安装系统)
- 企业版虚拟化,VMware esxi虚拟化工具,高性能服务结合,进行服务器资源虚拟化
- KVM工具,linux下的虚拟机工具(创建虚拟机+安装各种系统)
KVM虚拟化工具和VMware虚拟化工具的差别
在虚拟化底层技术上,KVM和VMware后续版本一样,都是基于硬件辅助虚拟化实现不同的是VMware作为独立的第三方软件可以安装在Linux、Windows、MacOS等多种不同的操作系统之上KVM是基于内核的虚拟机,kvm技术只能基于Linux系统上使用
什么是虚拟化技术
- 虚拟化(技术)是一种资源管理技术,是将计算机的各种实体资源(CPU,内存,磁盘空间,网络适配器等),予以抽象,转换后呈现出来并可供分隔、组合为一个或多个电脑配置环境。
3.Docker容器的部署形式
虚拟化技术分为全虚拟化技术,半虚拟化技术,还有基于CPU硬件加持下的全虚拟化技术。但是虚拟化技术的目的都是虚拟化出一台完整的计算机,拥有底层的物理硬件、操作系统和应用程序的完整环境。这种方式背后都是HyperVisor
(虚拟机监控程序)虚拟化做了大量的工作,特别重量级。
- 不同于虚拟化技术要完整的虚拟化一台计算机,容器技术更像是操作系统层面的虚拟化,它只需要虚拟出一个操作系统环境,这种方式对于物理机本身的资源充分利用有着巨大的好处。
- 容器内的应用程序直接运行在宿主机的内核上,容器内没有自己的内核,也没有对硬件进行虚拟,因此容器比起虚拟机更为轻便。
Docker技术详解
Docker底层原理
- Docker是基于Google公司推出的Golang语言开发而来,基于Linux系统内核的Cgroups、NameSpace,以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。
- 对进程进行封装隔离,属于操作系统层面的虚拟化技术。
- 利用Docker可以实现开发,测试,生产环境的部署一致性,极大的减少运维成本。如下所示:
传统虚拟机技术与容器技术的对比
Docker引擎
Docker组成
docker最核心的组件
- image镜像,构建容器(我们将应用程序运行所需的环境,打包为镜像文件)
- Container,容器(你的应用程序,就跑在容器中)
- 镜像仓库(dockerhub)(保存镜像文件,提供上传,下载镜像)
- Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是dockerfile,且该脚本还能够构建出镜像文件
创建容器的过程
获取镜像,如docker pull centos ,从镜像仓库拉取 使用镜像创建容器分配文件系统,挂载一个读写层,在读写层加载镜像 分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信 容器获取IP地址执行容器命令,如/bin/bash 反馈容器启动结果。
Images(镜像)
镜像是一个只读模板,用于创建容器,也可以通过Dockerfile文本描述镜像的内容。镜像的概念类似于编程开发里面向对象的类,从一个基类开始(基础镜像Base Image) 构建容器的过程,就是运行镜像,生成容器实例。
Dacker镜像的描述文件是Dockerfile,包含了如下的指令
- FROM定义基础镜像
- MAINTAINER作者
- RUN运行Linux命令
- ADD添加文件/目录
- ENV环境变量
- CMD运行进程
Container(容器)
容器是一个镜像的运行实例,镜像>容器。
创建容器的过程
- 获取镜像,如docker pull centos ,从镜像仓库拉取
- 使用镜像创建容器
- 分配文件系统,挂载一个读写层,在读写层加载镜像
- 分配网络/网桥接口,创建一个网络接口,让容器和宿主机通信
- 容器获取IP地址
- 执行容器命令,如/bin/bash
- 反馈容器启动结果。
Registry(仓库)
Docker镜像需要进行管理,docker提供了Registry仓库,其实它也是一个容器,可以用于可以基于该容器运行私有仓库。 也可以使用Docker Hub互联网公有镜像仓库。
安装Docker
Docker官网:https://www.docker.com/
基础环境配置
# 更新基础仓库
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 更新阿里云仓库
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repoyum clean all && yum makecache# 安装常用命令
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet sl psmisc nethogs glances bc ntpdate openldap-devel
开启linux内核流量转发
cat > /etc/sysctl.d/docker.conf << EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
net.ipv4.ip_forward = 1
EOF# 加载修改内核的参数,配置文件
# 按照如下命令,执顺序
modprobe br_netfilter
sysctl -p /etc/sysctl.d/docker.conf
# net.bridge.bridge-nf-call-ip6tables = 1
# net.bridge.bridge-nf-call-iptables = 1
# net.ipv4.conf.default.rp_filter = 0
# net.ipv4.conf.all.rp_filter = 0
# net.ipv4.ip_forward = 1
利用yum快速安装docker
# 提前配置好yum仓库
# 1.阿里云自带仓库 2.阿里云提供的docker专属repo仓库
curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo# 更新yum缓存
yum clean all && yum makecache# 查看yum仓库中docker的可用版本
yum list docker-ce --showduplicates | sort -r# yum安装dokcer
yum -y install docker-ce-20.10.6# 如果需要安装旧版本,软件名称结尾直接跟版本号即可
# yum -y install docker-ce-18.09.9
镜像加速器
- 使用dokcer首要操作就是获取镜像文件,默认下载时Docker Hub(国外网站)下载,网速较慢。国内很多云服务商都提供了加速服务,阿里云加速器,Daocloud加速器,灵雀云加速器。
打开阿里云官网: 产品 => 容器与中间件 => 容器与镜像服务ACR => 管理控制台 => 镜像加速器 => CentOS
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://0r3dxh20.mirror.aliyuncs.com"]
}
EOF# 启动docker
systemctl daemon-reload
systemctl enable docker
systemctl restart docker# 查看docker是否正确启动
docker version
Docker基础命令
Nginx Web服务器,运行一个80端口的网站
在宿主机上,运行Nginx1. 开启服务器2. 在服务器上安装好nginx所需的依赖关系3. 安装Nginx yum -y install nginx4. 修改Nginx配置文件5. 启动Nginx服务6. 客户端去访问Nginx- 该运行方式,是比较耗时的。。。
在Docker容器中,运行Nginx
1. 获取镜像2. 运行镜像,生成容器,你想要的容器,就运行在容器中。
用docker运行Nginx
# 先搜索一下,查看镜像文件是否存在
docker search nginx# 获取镜像,获取是从你配置好的镜像站中,去拉取nginx镜像
docker pull nginx# 查看本地的docker镜像有哪些
docker images # 删除镜像
docker rmi [镜像id]# 运行镜像的命令,参数如下
docker run 参数 镜像的名字/id# -d 后台运行容器
# -p 80:80 端口映射,宿主机端口:容器内端口(客户访问宿主机端口,也就访问到了容器内端口)
# 运行结果如下,docker run命令,会返回一个容器的ID
docker run -d -p 80:80 nginx
# 3e239919b44a429b884193c84dfc709eaa3d4bc4c27f768c302b184dbc5d5b8a# 查看容器是否在运行
# docker ps -a :显示所有的容器,包括未运行的。
docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# 3e239919b44a nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, :::80->80/tcp elated_blackburn# 此时可以访问到宿主机的80端口,查看容器内的80端口的应用是什么了
在本机浏览器输入虚拟机ip地址:192.168.15.80# 可以尝试停止容器,看一下结果
docker stop [容器id]docker stop 3e239919b44a
# 3e239919b44a# 查看容器是否在运行
docker ps
# CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Docker容器原理详解相关推荐
- docker 容器 exited_Docker实战006:docker容器使用详解
Docker容器也是docker的核心成员,是docker镜像的一个运行实例.一个镜像可以创建多个容器,多个容器也可以在同一台机器上运行并与其他容器共享操作系统内核同时将应用程序与系统其它周围环境隔离 ...
- docker logs 查看docker容器日志详解
docker logs 查看docker容器日志详解 通过docker logs命令可以查看容器的日志. 命令格式: $ docker logs [OPTIONS] CONTAINEROptions: ...
- Day 92 : Docker容器技术详解
Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版 ...
- Docker镜像原理详解
第一部分:Docker镜像的基本知识 1.1 什么是Docker镜像 从整体的角度来讲,一个完整的Docker镜像可以支撑一个Docker容器的运行,在 Docker容器运行过程中主要提供文件系统视角 ...
- Docker容器部署详解
1.什么是Docker? 2.Docker的应用场景有哪些? 3.Docker的优点有哪些? 4.Docker与虚拟机的区别是什么? 5.Docker的三大核心是什么? 6.如何快速安装Docker? ...
- Docker容器技术详解
目录 1.什么是容器 2.容器和虚拟化的区别 2.1.虚拟化的几个缺点 2.2.docker的优势 3.什么是Docker 4.Docker的安装和使用 首先我们需要卸载掉旧版本的 Docker 我们 ...
- docker核心网络原理详解
docker清空所有容器: 删除所有镜像: ip addr docker是如何处理容器网路访问的? 跑一个tomcat容器并使用ip addr查看ip地址: linux是可以ping通容器内部的ip的 ...
- docker ps命令详解 列出运行中的容器
docker ps命令详解 列出运行中的容器 使用docker ps命令即可列出运行中的容器,执行该命令后,会出现如下7列表格 CONTAINER_ID 表示容器ID IMAGE ...
- 七、Docker网络模式详解
目录 一.docker网络概述 1.docker网络实现的原理 2.容器的端口映射 1).端口映射 2).四种端口映射 3).端口映射演示 (1).随机端口映射(-P) (2).指定端口映射(-p 宿 ...
最新文章
- AlexeyAB DarkNet YOLOv3框架解析与应用实践(五)
- mysql安装图解 mysql图文安装教程(详细说明)
- linux命令行 正则,在Linux命令行中使用正则表达式
- python字符串操作_浅谈Python 字符串特有的操作方法
- 在CentOS上禁用IPv6
- 重读经典:《ImageNet Classification with Deep Convolutional Neural Networks》
- 计算机网络-应用层与传输层
- 【新年礼物】分享十个珍藏学习编程的网站,助大家2022如虎添翼
- 拳王虚拟项目公社:你最重要的事情是什么?
- qcloud windows rtx cpu 100%定位
- 天雁计算机TY-82MS-4说明书,怎样用天雁TY-82MS-4计算器做一次和二次函数,跪谢!...
- JDK 动态代理之源码解析
- 石川 :学术界、管理人、投资者视角下的因子投资
- 系统级程序设计第一课内容——Linux系统与操作 2022.5.2
- 关于wx.downloadFile的URL 微信小程序下载文件 服务器http服务的部署
- 两台 Linux 主机之间配置信任关系(以及如何解除)
- 中兴捧月大赛之方案探讨
- CF #768 E.Flipping Ring
- VIM 中使用 Ctrl-A 和 Ctrl-X 控制数字增减
- 三国志战略版:Daniel_S7赤壁_神武开荒攻略上篇_开荒
热门文章
- ubuntu退出python_python ubuntu 命令
- 什么?哨兵位竟这么简单......
- lnmp一键安装包 安装php-fpm,LNMP一键安装包的Nginx 502 Bad Gateway错误可能原因及解决方法...
- 不容易掉的蓝牙耳机、佩戴不容易掉下来的无线蓝牙耳机
- sql 查询相互关注的人
- 微信小程序点击icon实现分享功能
- 五十.商品管理-SPU检索功能
- indexDB的使用
- indexDB本地存储
- java kvm_KVM 介绍(1):简介及安装