2020-DevOps导论-Docker
Docker
1. 什么是Docker
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。(2013年出现)
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
- 我们将所有封装成为一个镜像,每次运行以下就可以
1.1. 应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
1.2. Docker产品
- Docker Desktop:开发者使用的工具
- Docker Hub:可以去拉取的东西。
2. 容器技术基础
- Docker技术:
- 容器技术
- 有效分配与管理物理资源
- 实现资源隔离
- 镜像技术
- 打破"代码即应用"的观念
- 从系统环境开始,自下而上打包应用(所有依赖都已经打包了)
- 容器技术
- Docker容器引擎是基于LXC
- 通过namespace进行进程隔离:命名空间是在多个用户之间划分群集资源的方法
2.1. Docker Engine
2.2. 组件清单
- 我们可以自己搭建私有的镜像仓库
- 也可以使用Docker Hub上的景象
2.3. Docker文件系统和Dockerfile
- copy-on-write
2.4. Docker网络模式
2.4.1. Bridge模式
- 网桥连通:内部有自己的IP地址
2.4.2. Host模式
- 端口使用和主机相同的端口
2.4.3. 容器模式
- A容器有自己的网络空间
- B容器会共享A容器的所有的网络空间
2.4.4. None
- 没有网络
2.5. Docker存储驱动驱动
- 默认使用DeviceMapper
2.6. 演示
- docker file
1 |
|
- docker Build:生成镜像
1 |
|
- 启动镜像
1 |
|
3. 容器编排与调度
- 适应微服务架构
- Compose自动部署成为多份
- Kubernetes
3.1. 容器的编排
- 容器引擎完成容器编排。
- 实例数量少于规定数量
- 自动启动容器
- 从Worker算法找到一个节点来启动
- 上面的是控制节点的工作
- 节点之间通过gossip网络保证一致性
- 编排通过Compose文件来管理,这个文件包括
- 容器之间的关系
- 容器的版本
- 网络、存储、依赖的服务
3.2. Kubernetes
- Borg:基于namespace和cgroup实现
- Broglet:跑一组容器的结点(Master用来管理)
- Scheduler:调度算法、亲和性等
- Google的想法就是开源的方法,然后在开源基础上发展自己的东西
- Pod:表示一个比较的紧密的容器(共享网络空间和存储,对外只有一个IP),label:进行标签化
- Kubelet:完成管理
- API Server\Replication Controller:控制管理
- Deployment:
- StatefulSet:
- DeamonSet:
- Job:
- CronJob:
- Service:服务
- Node:节点
- Kubernetes Master:主节点
- 避免pod被调度到不合适的节点:
- Taints
- Tolerations
- ETCD:存储状态数据
4. CNCF
- 右侧上面两个是已经成熟的产品
- Kubernetes
- Prometheus:监控:监控容器和应用等等
5. Docker与Devops
- 交付原来是代码
- 现在使用容器和镜像来进行交付(标准化)
6. 参考
7. 实例
- 多步构建允许在Dockerfile中使用多个FROM指令。两个FROM指令之间的所有指令会生产一个中间镜像,最后一个FROM指令之后的指令将生成最终镜像。中间镜像中的文件可以通过
COPY --from=<image-number>
指令拷贝,其中image-number
为镜像编号,0为第一个基础镜像。没有被拷贝的文件都不会存在于最终生成的镜像,这样可以减小镜像大小,同时避免出现安全问题。
2020-DevOps导论-Docker
https://spricoder.github.io/2020/07/02/2020-Devops-introduction/Docker/2020-Devops-introduction-Docker/