前言
弱小和物资不是生存的障碍,傲慢才是。 ——《三体》
什么是Docker?
Docker就是一个工具。它可以让我们快速安装、开发、部署和运行任何应用。从而大大提升我们整个流程的交付效率!
关于它的历史,大家自行百度,讲的都一样。这一阶段我们需要理解的是Docker的底层原理。下面的图片比较了 Docker 和传统虚拟化方式的不同之处,可见容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
为什么学Docker?
问题场景:
一款产品,开发-上线 两套环境!开发环境和应用环境不同,还要进行不同的环境配置。
问题:开发人员本地运行正常,线上不可运行,或者是版本更新导致服务崩溃。
环境配置是非常麻烦的,每个机器都要单独部署(Redis集群、ES集群、Hadoop集群。。。)上百台服务器,费时费力!
发布一个项目,如:Java项目(Redis、MySQL、JDK、ES)项目不能带上环境打包安装。
之前的服务器配置(Redis、MySQL、Nginx、ES)配置非常麻烦,还不能跨平台
如何解决上述问题?
使用Docker打包镜像,直接发布运行即可!
传统:开发生产Jar包,运维负责部署
现在:开发直接打包部署上线,全流程自动化,省时省力!
Docker最核心的能力
- 快速交付应用程序
- 我们希望你的开发环境能够更好的提高你的工作效率。Docker容器能够帮助开发人员、系统管理员、QA和版本控制工程师在一个生产环节中一起协同工作。我们制定了一套容器标准,而这套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。
- 我们使应用的构建方式更加简单,可以快速的迭代你的应用,并且可以可视化的来查看应用的细微更改。这能够帮助组织里边的成员来更好的理解一个应用从构建到运行的过程。
- Docker 是一个轻量级的容器,所以它的速度是非常快的,而容器的启动时间只需要一秒钟,从而大大的减少了开发、测试和部署的时间。轻松部署和扩展
- Docker 容器可以运行在大多数的环境中,你可以在桌面环境、物理主机、虚拟主机再到数据中,私有或者公有云中部署。
- 因为 Docker 可以从多平台下运行。你可以很容器的迁移你的应用程序。如果需要,你可以非常简单的将应用程序从测试环境迁移到云,或者从云迁移到测试环境。
- Docker 是一个轻量级的容器,因此它可以在很短的时间内启动和关闭。当你需要的时候,你可以启动多个容器引擎,并且在不需要使用他们的时候,可以将他们全部关闭。
- 快速构建 轻松管理
- 因为Docker上述轻便,快速的特性。可以使您的应用达到快速迭代的目的。每次小的变更,马上就可以看到效果。而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式。
学前准备
基本的Linux命令
不需要精通,最起码敲个命令知道啥意思就行,实在看不懂就百度。我自学的理念就一条:实践出真知,干就完了!
学习路径
- Docker概述
- Docker容器虚拟化的底层原理
- Docker安装
- Linux系统安装
- Windows系统安装
- Mac系统安装
- Docker命令
- 镜像命令
- 容器命令
- 操作命令
- Docker镜像
- 基本概念
- 获取镜像
- 列出本地镜像
- 创建镜像
- 修改镜像
- 导入导出镜像
- 移除镜像
- 镜像的实现原理
- Docker容器
- 启动容器
- 新建并启动
- 启动已终止容器
- 守护态运行
- 进入容器
- attach命令
- exec命令
- 终止容器
- 导入导出容器
- 删除容器
- 启动容器
- Docker数据卷
- 创建数据卷
- 挂载一个主机目录为数据卷
- 匿名挂载
- 具名挂载
- 数据卷容器
- 利用数据卷容器进行备份、恢复、迁移数据卷
- 备份
- 恢复
- DockerFile
- 基本结构
- 指令
- 创建镜像
- Docker网络
- 外部访问容器
- 映射所有接口地址
- 映射到指定地址的指定端口
- 映射到指定地址的任意端口
- 查看映射端口配置
- 容器互联
- 自定义容器命名
- 容器互联
- 配置 DNS
- 容器访问控制
- 配置 docker0 网桥
- 自定义网桥
- 工具和示例
- pipework
- playground
- 编辑网络配置文件
- 外部访问容器
- IDEA整合Docker
- Docker Compose
- Docker Swarm
- CI/CD Jenkins
Linux下的所有命令的学习,有一条准则:善于用–help。
命令太多了,根本不可能记完!做为工程师,查手册是一个高级操作,精准无误的会使用才是王道!
我们只需要掌握常用的核心命令,对其他命令有一点印象,不会的时候–help一下就行了
后续学习
- K8s(Kubernetes)容器集群
学会Docker可以满足我们个人的日常开发,但是企业级应用还是要学习集群才行。
授人以渔
无论听什么课,看什么书,其最核心最精华的部分永远不是浮于表面的技术、内容,而是深邃的思想。只有思想才是万变不离其宗的核心,学习任何东西都应当学习其中的核心思想。同一种思想可以在不同的领域发光发热,这也创新的底层原理。