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
2
3
docker start 容器ID
docker stop 容器ID
docker restart 容器ID

删除容器

1
docker rm 容器ID

参考资料