Docker 基础
什么是Docker?
加速 构建、共享、运行 应用程序的方式
为什么要使用Docker?
问题1
开发时,本机测试环境可以跑,但生产环境跑不起来,很可能的原因:软件环境版本不同。
【Docker解决方案】将 “软件+应用环境” 一起打包 => 一致的运行环境,可以更轻松的构建
问题2
需要部署n台服务器,服务器软件环境可能不同、服务器多
【Docker解决方案】将 “应用+应用环境” 打包为镜像,各服务器下载镜像,运行即可
问题3
server有限,需要在一台server运行2个不同软件环境的应用
【Docker解决方案】Docker打包2个镜像,分别运行(2个应用进程隔离,互不影响)
对比虚拟机
Docker和虚拟机在物理机中的位置
从最后起到的作用看:Docker服务 <=> 虚拟机+linux/window
Docker和虚拟机对比
虚拟机 | Docker | |
---|---|---|
磁盘 | xG~xxG(安装虚拟机+os) | xxM~xxxM(安装docker) |
部署 | 每次费时费力 | 从第2次部署便捷 |
启动速度 | x分钟(开机->运行项目) | x秒(开启容器->运行项目) |
CPU、内存占用 | 高(运行虚拟机+os) | 极低(运行Docker服务) |
运行速度 | 慢(调度:应用->linux/windows->虚拟机->os) | 快(调度:应用->docker->os) |
耦合性 | 多个app安装在一起,容易相互影响 | 一个app一个容器,实现隔离 |
系统依赖 | 无 | linux内核 |
Docker核心概念
镜像
一个镜像 相当于 一个软件
特点:只读
容器
基于某个镜像运行一次就生成一个程序实例,一个程序实例即为容器
特点:可读可写
仓库
存储Docker中镜像的位置
远程仓库:远程服务器存储镜像的位置
本地仓库:当前自己本地存储镜像的位置
Dockerfile
定义
构建镜像的文件
为什么需要Dockerfile
虽然官方提供很多镜像,但Dockerfile可以使用户将自己的应用打包为镜像,这样就可以以容器的形式运行自己的应用
Docker架构图
Docker镜像分层原理
镜像
软件运行环境 + 软件
包含:代码、运行时所需的库、环境变量、配置文件
镜像为什么这么大?
image = 自身软件+软件自身依赖+os依赖
镜像为什么分层?
Docker在设计镜像时,每一个镜像都是由n个镜像共同组成,镜像像花卷一层层组成(UnionFs联合文件系统)
通过分层:多个镜像可以实现基础镜像的共享,从而减小远程/本地仓库整体体积
Docker常用命令
镜像命令
查看本地仓库有哪些镜像
1 | docker images |
下载新镜像
docker pull 镜像名称:版本号
1 | docker pull mysql:8.0.26 |
删除镜像
1 | docker rmi mysql:8.0.26 |
容器命令
运行容器
1 | docker run --name ubuntu_v1 -id ubuntu:20.0 |
查看正在/历史运行的容器
1 | docker ps -a |
进入容器
1 | docker exec -it 容器ID bash |
启动|停止|重启容器
1 | docker start 容器ID |
删除容器
1 | docker rm 容器ID |
参考资料
- [1] Docker容器技术实战教程