学习路径:
- Docker概述
- Docker安装
- Docker命令
- 镜像命令
- 容器命令
- 操作命令
- ...
- Docker镜像
- 容器数据卷
- DockerFile
- Docker网络原理
- Idea整合Docker
- Docker Compose
- Docker Swarm
- CI/CD Jenkins
Docker为什么会出现?
总结一句话:
项目部署的时候把环境等相关配置也打包进去,从而别人下载的时候可以直接运行使用。
一款产品:开发--上线 要两套环境:应用环境,应用配置
开发 --- 运维。问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大。
环境配置十分麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop)费时费力!
发布一个项目(jar+(Redis MySQL jdk ES)),项目能不能都带上环境安装打包?
之前在服务器配置一个应用的环境 Redis、MySQL、jdk、ES、Hadoop,配置超级麻烦且不能跨平台。
传统:开发jar,运维来做部署;
现在:开发打包部署上线,一套流程做完!
java--apk--发布(应用商店)--张三使用apk--安装即可用
java--jar(环境)--打包项目带上环境(镜像)--(Docker仓库:商店)--下载我们发布的镜像--直接运行即可!
Docker的思想来自集装箱
JRE--多个应用(端口冲突)--原来都是交叉的
隔离:Docker核心思想,打包装箱,每个箱子都是互相隔离的。
例如:这个船上要装 香蕉和猴子,要把他们隔离开,总不能船到岸的时候香蕉没了,只剩下一个个的胖猴子吧。这就用到了Docker的隔离机制,可以将服务器利用到极致。
Docker的历史
Docker基于Go语言开发的,开源项目
官网:https://www.docker.com/
文档地址:https://docs.docker.com/
仓库地址:https://hub.docker.com/
Docker能干嘛
之前的虚拟机技术
缺点:
- 资源占用十分多;
- 冗余步骤多;
- 启动很慢。
容器化技术
不是模拟一个完整的操作系统
Docker 和 虚拟机技术 的不同:
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件;
- 容器内的应用直接运行在宿主机,没有自己的内核,也没有虚拟我们的硬件,所以就轻便了;
- 每个容器间互相隔离,每个容器内都有一个属于自己的文件系统,互不影响。
DevOps
应用更快速的交付和部署
传统:一堆帮助文档,安装程序;
Docker:打包镜像发布测试,一键运行
更便捷的升级和扩缩容
使用Docker之后,部署应用就和搭积木一样,项目打包为一个镜像
更简单的系统运维
容器化之后,开发和测试环境高度一致
更高效的计算资源利用
Docker是 内核级别的虚拟化,在一个物理机上可以运行很多的容器实例。服务器的性能可以被压榨到极致。
Docker的几个概念
Docker基本架构
镜像(Image)
Docker镜像就好比一个模板,可以通过这个模板来创建容器服务,tomcat镜像==>run==>tomcat01容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或项目运行就是在容器中)
容器(Container)
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建,启动、停止、删除、基本命令!目前可以把这个容器理解为一个简易的Linux系统。
仓库(Repository)
存放镜像的地方;
分为 公有仓库 和 私有仓库;
Docker Hub(默认是国外的)
阿里云...都有容器服务器(配置镜像加速)