认识docker
文章目录
认识docker
最近的三年多时间,关注容器圈的话应该会知道这么几个事情:
-
容器技术持续火爆
-
Kubernetes(k8s)成为容器编排管理的标准
-
国内外厂商均已开始了全面拥抱Kubernetes的转型, 无数中小型企业已经落地 Kubernetes,或正走落地的道路上 。基于目前的发展趋势可以预见,未来几年以kubernetes平台为核心的容器运维管理、DevOps等将迎来全面的发展。
本着实践为核心的思想 , 分别讲述三个事情:
-
项目的容器化
教大家如何把公司的项目做成容器,并且运行在docker环境中
-
使用Kubernetes集群来管理容器化的项目
带大家一步一步部署k8s集群,并把容器化后的demo项目使用k8s来管理起来
-
使用Jenkins和Kubernetes集成,实现demo项目的持续集成/持续交付(CI/CD)
会使用k8s管理应用生命周期后,还差最后的环节,就是如何把开发、测试、部署的流程使用自动化工具整合起来,最后一部分呢,课程会教会大家如何优雅的使用gitlab+Jenkins+k8s构建企业级的DevOps平台
你将学到哪些
-
Docker相关
- 如何使用Dockerfile快速构建镜像
- Docker镜像、容器、仓库的常用操作
- Docker容器的网络(Bridge下的SNAT、DNAT)
-
Kubernetes相关
- 集群的快速搭建
- kubernetes的架构及工作流程
- 使用Pod控制器管理业务应用的生命周期
- 使用CoreDNS、Service和Ingress实现服务发现、负载均衡及四层、七层网络的访问
- Kubernetes的认证授权体系
-
使用EFK构建集群业务应用的日志收集系统
-
基于Gitlab+Jenkins+k8s构建DevOps平台
- Jenkins介绍及流水线的使用
- Jenkinsfile及多分支流水线的实际应用
- Jenkins集成sonarQube、Docker、Kubernetes
- 使用groovy编写sharedLibrary,实现CI/CD流程的优化
流程示意
认识docker
怎么出现的
-
轻量、高效的虚拟化
Docker 公司位于旧金山,原名dotCloud,底层利用了Linux容器技术(在操作系统中实现资源隔离与限制)。为了方便创建和管理这些容器,dotCloud 开发了一套内部工具,之后被命名为“Docker”。Docker就是这样诞生的。
(思考为啥要用Linux容器技术?)
Hypervisor: 一种运行在基础物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享硬件 。常见的VMware的 Workstation 、ESXi、微软的Hyper-V或者思杰的XenServer。
Container Runtime:通过Linux内核虚拟化能力管理多个容器,多个容器共享一套操作系统内核。因此摘掉了内核占用的空间及运行所需要的耗时,使得容器极其轻量与快速。
- 软件交付过程中的环境依赖
几个知识点
-
可以把应用程序代码及运行依赖环境打包成镜像,作为交付介质,在各环境部署
-
可以将镜像(image)启动成为容器(container),并且提供多容器的生命周期进行管理(启、停、删)
-
container容器之间相互隔离,且每个容器可以设置资源限额
-
提供轻量级虚拟化功能,容器就是在宿主机中的一个个的虚拟的空间,彼此相互隔离,完全独立
-
CS架构的软件产品
发展史
13年成立,15年开始,迎来了飞速发展。
Docker 1.8之前,使用 LXC ,Docker在上层做了封装, 把LXC复杂的容器创建与使用方式简化为自己的一套命令体系。
之后,为了实现跨平台等复杂的场景,Docker抽出了libcontainer项目,把对namespace、cgroup的操作封装在libcontainer项目里,支持不同的平台类型。
2015年6月,Docker牵头成立了 OCI(Open Container Initiative开放容器计划)组织,这个组织的目的是建立起一个围绕容器的通用标准 。 容器格式标准是一种不受上层结构绑定的协议,即不限于某种特定操作系统、硬件、CPU架构、公有云等 , 允许任何人在遵循该标准的情况下开发应用容器技术,这使得容器技术有了一个更广阔的发展空间。
OCI成立后,libcontainer 交给OCI组织来维护,但是libcontainer中只包含了与kernel交互的库,因此基于libcontainer项目,后面又加入了一个CLI工具,并且项目改名为runC ( https://github.com/opencontainers/runc ), 目前runC已经成为一个功能强大的runtime工具。
Docker也做了架构调整。将容器运行时相关的程序从docker daemon剥离出来,形成了containerd。containerd向上为Docker Daemon提供了gRPC接口
,使得Docker Daemon屏蔽下面的结构变化,确保原有接口向下兼容。向下通过containerd-shim
结合runC
,使得引擎可以独立升级,避免之前Docker Daemon升级会导致所有容器不可用的问题。
Docker 网络
|
|
网络模式 | 介绍 |
---|---|
Host【主机】 | 容器不虚拟出自己的网卡,配置自己的ip |
Bridge【桥接】 | 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。 |
None | 该模式关闭了容器的网络功能。 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。 |
自定义网络 | 略 |
查看 docker 的 network
给你个全的,你在Linux环境下多试下就明白了: $0 这个程式的执行名字 $n 这个程式的第n个参数值,n=1…9 $* 这个程式的所有参数,此选项参数可超过9个。 $# 这个程式的参数个数 $$ 这个程式的PID(脚本运行的当前进程ID号) $! 执行上一个背景指令的PID(后台运行的最后一个进程的进程ID号) $? 执行上一个指令的返回值 (显示最后命令的退出状态。0表示没有错误,其他任何值表明有错误) $- 显示shell使用的当前选项,与set命令功能相同
|
|
文章作者 lyr
上次更新 2022-03-30