1、docker容器技术初探与实践PPT 目录目录 Docker介绍与原理介绍与原理Docker基本操作Docker网络,镜像与仓库Docker实践?让我们从虚拟机开始谈起让我们从虚拟机开始谈起 虚拟硬件层 虚拟硬件层 Docker是什么?是什么?Docker是一个构建在LXC基础之上,基于进程的应用程序级别的资源隔离与配额。容器容器 vs 虚拟机虚拟机 对比项 运行形态 容器 直接运行在宿主机内核上 启动速度 快,秒级 占用磁盘 小,MB级 容器的优势容器的优势 多维隔离 通过程,进程通信,主机名,namespace可隔离进网络,用户组等 环境封装 容器镜像中包含了操作系多重限制通过内存,磁盘,
2、网络,设备cgroup可实现对等进行资源限制层级文件系统通过可叠加的层次文件系统容器到底是啥?容器到底是啥?namespace?Mount Namespace Pid Namespace Net namespace Ipc namespace Uts namespace User namespace?cgroups Blkio Cpu Cpuacct Cpuset Devices Freezer MemoryNet_cls 资源隔离 资源限制资源隔离资源隔离 Namespace Namespace Mount Namespace UTS Namespace IPC Namespace PID
3、Namespace 被隔离的系统资源被隔离的系统资源 文件系统挂载点 每个容器能看到不同的文件系统层次结构Node name 和 domain name 每个容器可以有自己的特定的进程间通信资源 每个容器有其自己的有在同一个进程ID数字空间 每个有其移,因为资源限制资源限制 cgroup cgroup 子系统子系统 blkio cpu cpuacct cpuset devices 作用作用 为?块?设?备?设?定?输?入?/输?出?限?制?,使?用?调?度?程?序?提?供?对?CPU 的?自?动?生?成?cgroup 中?任?务?所?使为?cgroup 中?的?任?务?分?配?独?立可?允?许
4、?或?者?拒?绝?cgroup 中?的freezer?起挂?或?者?恢?复?cgroup 中的?任?联合文件系统联合文件系统UnionFS 联合文件系统(UnionFS)是一种轻量级的高性能分层文件系统,它次提交,并层层叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,应用看到的是挂载的最终结果。Docker容器网络模型容器网络模型CNM Runtime Docker Contianer Network Model(libnetwork)Docker存储挂载存储挂载 容器运行过程中产生的数据,默认就存在容器的临时存储中,会随容器删除而消失。要想将容器运行过程中产生的数据持久保存下来,必须要把
5、这些文件或目录挂载至宿主机上。或者一些需要运行期指定的配置文件,也可以通过卷的方式挂进容器中去。挂载的目标,可以是文件,也可以是目录。/opt/data/opt/configs-v/home/usr1/data/app1:/opt/data volume 容器重新定义了应用的边界容器重新定义了应用的边界=应用安装包/介质+中间件安装包原来的应用 操作系统容器=镜运行环境中间件应用介质容器促进了应用交付的标准化容器促进了应用交付的标准化 Engine 基础设施标准化 Image 应用交付标准化 目录目录 Docker介绍与原理Docker基本操作基本操作容器网络,镜像与仓库Docker实践?Do
6、cker的安装的安装?Windows 下载docker-toolbox执行安装。下载地址:http:/ 以centos7为例,root用户使用yum安装:yum-config-manager-add-repo http:/ yum makecache fast&yum-y install docker-ce?Mac 启动你的第一个容器启动你的第一个容器 以启动一个nginx服务为例:#docker run d p 8080:80 n myng nginx 参数说明:-d -p 以后台方式运行-n 端口映射,宿主机端口:容器端口 nginx 指定容器的名称 nginx:latest镜像名称与。前
7、面为镜像名称,冒号后为镜像tag。此为略写模式,全部应为tag:输出:访问nginx更多更多docker run参数参数?-a stdin:指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR?-d:后台运行容器,并返回容器ID;?-i:以交互模式运行容器,通常与 -t 同时使用;?-p:端口映射,格式为:主机(宿主)端口:容器端口?-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;?-name:为容器指定一个名称;?-dns:指定容器使用的DNS服务器,默认和宿主一致;?-dns-search:指定容器DNS搜索域名,默认和宿主一致;?-h:指定容器的 hostn
8、ame;?-e username=ritchie:设置环境变量;容器常用操作容器常用操作 查看所有运行中的容器#docker ps 查看所有容器#docker ps-a 查看容器的日志#docker logs 容器名称或容器id 停止容器#docker stop 容器名称或容器id 启动容器 删除容器在容器中执行某个命令进入容器内部查看容器的详细信息从宿主机往容器中复制数据镜像常用操作镜像常用操作 登陆镜像仓库#docker login 仓库地址:端口 登出镜像仓库#docker logout 从镜像库拉取镜像#docker pull 镜像名称:镜像tag 查看所有镜像 删除镜像为镜像重新打上
9、传镜像至仓库端口映射端口映射 Docker中,可以使用-P 或-p参数,将容器中的端口暴露为宿主机的端口,以便使外部可与容器进行通信。命令格式:#docker run d p 8080:80 n myng nginx -P 标记时,Docker 会随机映射一个 4900049900 的端口到内部容器开放的网络端口-p(小写)可以指定要映射的IP和端口。如果多个端口,则添加多个容器。-p 参数有三种格式?hostPort:containerPort(映射所有接口地址)将本地的 5000 端口映射到容器的 5000 端口,可以执行如下命令:$docker run-d-p 5000:5000 ngi
10、nx 此时默认会绑定本地所有接口上的所有地址。?ip:hostPort:containerPort(映射指定地址的指定端口)指定映射使用一个特定地址,比如 localhost 地址 127.0.0.1 目录目录 Docker介绍与原理Docker基本操作容器网络,镜像与仓库容器网络,镜像与仓库Docker实践?容器网络高级模式容器网络高级模式 Docker run中,可以使用network 指定容器的网络模式命令格式:#docker run network=网络模式 n myng nginx 可选的网络模式有如下五种:?none:容器将不能访问任何外部路由?Bridge 容器将使用docker
11、的默认网络设置。在主机上设置 docker0一个通常命名的网桥,并地址将被分配给桥接网络上的容器,流量将通过该桥接路由到容器?container 容器将共享另一个容器的网络堆栈。另一个容器的名称必须以格式提供自定义镜像自定义镜像 Docker使用dockerfile来定义镜像的构建过程。Dockerfile并支持以#开头的注释行。Dockerfile语法语法 指令 FROM MAINTAINER 说明 指定所创建镜像的基础镜像 指定维护者信息 RUN CMD LABEL EXPOSE ENV ADD 运行命令 指定启动容器时默认执行的命令 指定生成镜像的元数据标签信息 声明镜像内服务所监听的端
12、口 指定环境变量 赋值指定的路径下的内容到容器中的Dockerfile最佳实践最佳实践?精简镜像用途:尽量让每个镜像的用途都比较集中、单一,避免构造大而复杂、多功能的镜像;?选用合适的基础镜像:过大的基础镜像会造成构建出臃肿的镜像,一般推荐比较小巧的镜像作为基础镜像;提供详细的注释和维护者信息:Dockerfile也是一种代码,需要考虑方便后续扩展和他人使用;正确使用版本号:使用明确的具体数字信息的版本号信息,而非latest,可以避免无法确认具体版本号,统一环境;减少镜像层数:减少镜像层数建议尽量合并RUN指令,可以将多条RUN指令的内容通过及时删除临时和缓存文件:这样可以避免构造的镜像过于
13、臃肿,并且这些缓存文件并没有实际用途;镜像的构建,导入导出镜像的构建,导入导出 镜像构建常用语法:#docker build t 镜像名称:标签 f dockerfile镜像导出语法:#docker save 镜像名称:标签 o tar文件路径镜像导入语法:公共镜像库公共镜像库?dockerhub:Docker 官方镜像仓库,地址:https:/ 维护着超过15000的镜像。很多官方基础镜像都来源于此。可免费注册后上传自已的镜像。?国内镜像加速?阿里云:https:/?网易蜂巢:https:/ 私有镜像库私有镜像库?docker-registry docker官方提供的镜像仓库。安装方便,入门
14、级。?Harbor vmware开源的企业级镜像仓库。以 docker-registry支持等能力。?Nexus 3 著名的介质仓库,升级到 3之后,增加了 docker镜像管理能力。目录目录 Docker介绍与原理Docker基本操作容器网络,镜像与仓库Docker实践实践?本机使用本机使用docker快速搭建开发环境快速搭建开发环境?使用Docker可快速搭建mysql,redis等常用开发中间件 示例:docker run-idt-name mysql-devops-p 3306:3306 -v/work/docker/config/devops/f:/etc/mysql/conf.d/
15、f -v/work/docker/data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=devops mysql:5.7?使用 docker-compose 一键启动多个关联容器:示例:harbor安装,只需要修改对应的 docker-compos e.yml 文件,然后在此文件目录下执行:像使用虚拟机一样使用容器像使用虚拟机一样使用容器?需要固定容器IP 使用 docker network create 创建自定义网络,如:#docker network create-subnet=172.18.0.0
16、/16 mynetwork#docker run-itd-name networkTest1-net mynetwork-ip 172.18.0.2 centos:latest/bin/bash 创建容器时,使用此网络,并指定ip地址:如果需要容器跨主机之间可以互访,需要添加相应的路由?需提供对外访问?容器启动sshd进程,对外暴露端口 通过web shell 接入容器内部,通过 docker exec 的流式配套配套CI/CD完成持续构建与执续部署完成持续构建与执续部署CI/CD愿景:一次构建,随处部署。自动构建,持续部署。配套配套CI/CD完成持续构建与执续部署完成持续构建与执续部署配套配
17、套CI/CD完成持续构建与执续部署完成持续构建与执续部署配合编排与调度框架,大规模部署与运维容器配合编排与调度框架,大规模部署与运维容器容器编排 Ingress Service Deployment 容器调度配合编排与调度框架,大规模部署与运维容器配合编排与调度框架,大规模部署与运维容器业界的三大编排与调度框架?Kubernetes(k8s)谷歌出品。基于其内部系统Borg十多年的大规模应用运维经验总结。提供应用部署、维护、扩展机制等功能。生态活跃,发展迅速。功能强大,扩展性强。?Mesos Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核。它一个通用的二层调度框架,最初是由
18、加州大学伯克利分校的AMPLab开发的,后在 Twitter得到广泛使用。在可伸缩性和弹性方面,大规模集群的公司来说是最好的选择,在模拟测试中,其最高可以运行制在1000个节点(大约 5万个容器)配合编排与调度框架,大规模部署与运维容器配合编排与调度框架,大规模部署与运维容器Kubernetes,开启命令式运维Kubernetes 核心概念:?Node 宿主机节点,有master与worknode角色之分?Pod 容器组,运维的最小单位,内含一到多个高内聚的容器?Deployment 部署定义,集成了上线部署、滚动升级、创建副本、暂停上线任务,恢复上线任务,回滚到以前某一版本等能力?Service 负载均衡器,负责将流量转发至其下的各个?Ingress 对外域名服务,用于将应用的服务能力以域名加端口的方式对外暴露?PV 持久卷,用于容器数据持久化存储的volume容器日志收集容器日志收集 worknode deamonset filebeat 要求:将docker容器性能监控容器性能监控 方案:CAdvisor+InfluxDB+Grafana 1.部署cadvisor 平台 让创新无限谢谢