第二篇:Docker 镜像到底是什么?
【摘要】 上一篇我们提到了 Image。这一次把它单独拿出来讲。镜像是什么?可以简单把 Docker Image 理解成:一个用来创建容器的模板。例如:docker pull nginx拉下来的就是一个 Nginx 镜像。查看本地镜像:docker images或者:docker image ls可能看到:REPOSITORY TAG IMAGE ID SIZEnginx ...
上一篇我们提到了 Image。
这一次把它单独拿出来讲。
镜像是什么?
可以简单把 Docker Image 理解成:
一个用来创建容器的模板。
例如:
docker pull nginx
拉下来的就是一个 Nginx 镜像。
查看本地镜像:
docker images
或者:
docker image ls
可能看到:
REPOSITORY TAG IMAGE ID SIZE
nginx latest xxxxxxxx 188MB
这里:
nginx
是镜像名称。
latest
是 Tag。
为什么有 Tag?
同一个软件可能存在多个版本。
例如:
nginx:1.26
nginx:1.27
nginx:latest
所以生产环境最好不要什么都写 latest。
例如:
docker pull nginx:1.27
这样版本更加明确。
镜像是怎么来的?
镜像一般有两种来源。
第一种:
直接使用别人已经构建好的镜像。
docker pull nginx
第二种:
自己通过 Dockerfile 构建。
例如:
docker build -t my-app:1.0 .
后面我们会专门讲 Dockerfile。
镜像为什么是一层一层的?
Docker 镜像并不是一个简单的压缩包。
它采用了分层结构。
例如:
基础镜像
↓
安装依赖
↓
复制代码
↓
设置启动命令
每一层都可以被缓存和复用。
这也是 Docker 构建速度能够很快的重要原因之一。
删除镜像
docker rmi nginx
如果这个镜像正在被容器使用,Docker 通常不会让你直接删除。
这其实也是一种保护机制。
镜像离线搬家
有时候服务器没有网络,怎么办?
可以先把镜像保存成文件:
docker save nginx:latest -o nginx.tar
然后把 nginx.tar 传到另一台服务器。
再执行:
docker load -i nginx.tar
镜像就回来了。
这在离线服务器、内网环境中非常实用。
Image 和 Container 到底有什么关系?
可以把它想象成:
镜像 = 安装包/模板
容器 = 根据模板创建出来的实例
一个镜像可以创建多个容器:
nginx Image
/ | \
↓ ↓ ↓
web01 web02 web03
所以:
删除容器,不等于删除镜像。
下一篇开始研究容器本身。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)