Docker 里面的镜像(Image)和容器(Container)到底是什么

很多人学 Docker:

最容易懵的就是:

txt 复制代码
镜像 和 容器

因为:

txt 复制代码
这两个概念太抽象

但实际上:

你只要理解一个核心:

txt 复制代码
镜像是模板
容器是运行实例

整个 Docker:

瞬间就通了。


一、先记住一句话(最重要)

txt 复制代码
镜像(Image) = 安装包/模板
容器(Container) = 运行中的程序

二、最经典类比(必须理解)


类比1:游戏

Docker 游戏类比
镜像 游戏安装包
容器 正在运行的游戏

类比2:类和对象

如果你学过 C++/Java:

Docker 面向对象
Image
Container 对象

类比3:蛋糕模具

Docker 蛋糕
Image 蛋糕模具
Container 做出来的蛋糕

三、什么是镜像(Image)

镜像:

本质:

txt 复制代码
只读模板

里面包含:

txt 复制代码
程序
运行环境
依赖
配置

例如:

txt 复制代码
Redis镜像
MySQL镜像
Ubuntu镜像
Go镜像

四、镜像本身能运行吗

不能。

镜像:

只是:

txt 复制代码
模板

必须:

txt 复制代码
通过镜像创建容器

才能运行。


五、镜像里到底有什么

例如:

Redis 镜像。

里面已经包含:

txt 复制代码
Redis程序
Linux环境
Redis配置
启动命令

所以:

你不需要:

txt 复制代码
手动安装 Redis

六、什么是容器(Container)

容器:

是:

txt 复制代码
镜像运行后的实例

也就是:

txt 复制代码
真正运行中的程序

七、容器是活的

镜像:

txt 复制代码
静态
不会运行

容器:

txt 复制代码
动态
真正运行

例如:

bash 复制代码
docker run redis

Docker 会:

txt 复制代码
Redis镜像
↓
创建Redis容器
↓
启动Redis

八、真正运行的是容器

很多新人会误以为:

txt 复制代码
docker run redis
是在运行镜像

其实:

真正运行的是:

txt 复制代码
容器

镜像只是:

txt 复制代码
创建容器的模板

九、一个镜像可以创建多个容器

例如:

一个 Redis 镜像。

可以:

bash 复制代码
docker run redis
docker run redis
docker run redis

创建:

txt 复制代码
多个Redis容器

十、为什么镜像是只读的

镜像:

设计思想:

txt 复制代码
保持稳定

所以:

txt 复制代码
镜像不会改变

真正会变化的是:

txt 复制代码
容器

十一、容器里面的数据会变化

例如:

Redis 容器:

txt 复制代码
数据会增加
配置会变化
日志会变化

这些:

都属于:

txt 复制代码
容器层

十二、删除容器不会删除镜像

例如:

bash 复制代码
docker rm myredis

删除的是:

txt 复制代码
Redis容器

但:

txt 复制代码
Redis镜像还在

所以:

下次启动:

非常快。


十三、删除镜像

bash 复制代码
docker rmi redis

才是真正删除:

txt 复制代码
Redis镜像

十四、Docker 工作流程(必须掌握)

Docker 最核心流程:

txt 复制代码
Docker Hub
↓
下载镜像(Image)
↓
创建容器(Container)
↓
运行程序

十五、最经典命令解析


下载镜像

bash 复制代码
docker pull redis

作用:

txt 复制代码
下载 Redis 镜像

此时:

txt 复制代码
还没运行

创建运行容器

bash 复制代码
docker run redis

Docker:

txt 复制代码
基于 Redis 镜像
创建 Redis 容器
并启动

十六、查看镜像

bash 复制代码
docker images

输出:

txt 复制代码
REPOSITORY   TAG
redis        latest
mysql        latest

这些:

都是:

txt 复制代码
镜像

十七、查看容器

bash 复制代码
docker ps

输出:

txt 复制代码
CONTAINER ID   IMAGE
xxxxx          redis

这里:

txt 复制代码
IMAGE 表示:
这个容器基于哪个镜像

十八、镜像和容器关系图(重点)

txt 复制代码
Redis镜像
↓
创建
↓
Redis容器1(运行中)

Redis镜像
↓
创建
↓
Redis容器2(运行中)

十九、为什么 Docker 启动快

虚拟机:

txt 复制代码
启动整个操作系统

Docker:

txt 复制代码
直接基于镜像创建容器

所以:

txt 复制代码
非常轻量
启动极快

二十、镜像分层(了解)

Docker 镜像:

底层:

其实:

txt 复制代码
分层存储

例如:

txt 复制代码
Ubuntu层
↓
Go层
↓
项目代码层

所以:

Docker:

txt 复制代码
非常节省空间

因为:

相同层:

会复用。


二十一、为什么 Go 特别适合 Docker

因为:

Go:

txt 复制代码
编译后只有一个二进制文件

非常容易:

txt 复制代码
做成镜像

所以:

txt 复制代码
Go + Docker

是绝配。


二十二、真实开发里怎么用

例如:

你的项目:

txt 复制代码
Gin项目
MySQL
Redis
Nginx

都会:

txt 复制代码
各自运行在不同容器

二十三、整个项目可能是这样

txt 复制代码
mysql容器
redis容器
gin容器
nginx容器

每个:

txt 复制代码
相互隔离

但:

txt 复制代码
可以通信

二十四、为什么 Docker 这么火

因为:

Docker 真正解决:

txt 复制代码
环境一致性问题

以前:

txt 复制代码
我电脑能跑
你电脑跑不了

现在:

txt 复制代码
同一个镜像
所有机器都能跑

二十五、最后一句总结(必须记住)

txt 复制代码
镜像(Image)
=
程序 + 环境 + 配置 的模板

容器(Container)
=
镜像运行后的实例
=
真正运行中的程序

Docker 核心思想:

txt 复制代码
镜像负责"打包"
容器负责"运行"
相关推荐
s_w.h12 小时前
【 linux 】进程的调度算法
linux·运维·服务器
无级程序员12 小时前
记一次K8S增加新节点
云原生·容器·kubernetes
r-t-H12 小时前
KVM虚拟化与Docker基础实践-第三章
linux·运维·nginx·docker·容器
艾莉丝努力练剑12 小时前
【Linux网络】Linux 网络编程:传输层UDP
linux·运维·服务器·网络·计算机网络·udp
陈eaten12 小时前
centos 7等保整改学习
linux·运维·服务器·网络安全·centos·等保
牢七12 小时前
契约锁分析
linux·运维·服务器
无忧.芙桃13 小时前
进程间通信的基本概念(上)
linux·运维·服务器
运维瓦工13 小时前
DevOps 生态介绍(四):Sonarqube&jacoco 与jenkins集成使用
运维·jenkins·devops
草莓熊Lotso15 小时前
【Linux系统加餐】从原理到封装:基于建造者模式实现System V信号量工业级C++封装
android·linux·运维·服务器·网络·c++·建造者模式