03 镜像管理
[TOC]
00X01 镜像是什么
- 一个分层存储的文件
- 一个软件的环境
- 一个镜像可以创建N个容器
- 一种标准化的交付
- 一个不包含linux内核而又精简的linux操作系统
- 镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>查看镜像中各层内容及大小,
- 每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/中。
- 在Docker中容器是基于镜像启动的
- 镜像是启动容器的核心
- 使用快照的COW技术,确保底层数据不丢失
00X02 搜索镜像
[[email protected] ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13237 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1809 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 775 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 113
bitnami/nginx Bitnami nginx Docker Image 83 [OK]
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 74 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 64 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 61
nginxdemos/hello NGINX webserver that serves a simple page co… 49 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 44 [OK]
...
00X03 下载镜像
[[email protected] ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
b90c53a0b692: Pull complete
11fa52a0fdc0: Pull complete
Digest: sha256:30dfa439718a17baafefadf16c5e7c9d0a1cde97b4fd84f63b69e13513be7097
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
00X02 配置加速器
由于默认镜像来源是Docker Hub
Docker Hub 是Docker公司负责维护的公共注册中心,包含大量的容器镜像
Docker工具默认从这个公共镜像库下载镜像。
地址:https://hub.docker.com/explore
国内部分地区下载会很慢
可以需要配置国内源加速
在/etc/docker/daemon.json 中添加
{"registry-mirrors": ["http://hub-mirror.c.163.com"]}
00X04 镜像与容器联系
- Writable Container
- Add Apache Image
- Add Emacs Image
- Debian Base Image
- bootfs
- kernel
容器其实是在镜像的最上面加了一层读写层,在运行容器里文件改动时,会先从镜像里要写的文件复制到容器自己的文件系统中(读写层)。
如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高磁盘利用率。
若想持久化这些改动,可以通过docker commit 将容器保存成一个新镜像
00X05查看本地已有镜像
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED nginx SIZE
nginx latest 836b9965fccb 1 hours ago 109MB
centos latest b8dde07f62ef 6 weeks ago 202MB
busybox latest 77469193c529 6 months ago 1.22MB
00X06 创建一个nginx容器后台启动
[[email protected] ~]# docker run -itd --name nginx nginx
创建一个docker容器默认会从宿主机挂载/resolv.conf /hostname /hosts 这三个文件:
[[email protected] ~]# docker inspect nginx|grep Path\"
"Path": "nginx",
"ResolvConfPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/resolv.conf",
"HostnamePath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/hostname",
"HostsPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/hosts",
"LogPath": "/var/lib/docker/containers/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d/634bcb0a63ae4a721bd6160caa97970e8dfd7e5b6feacbf1f3b14faaada5273d-json.log",
容器存储对应宿主机的位置
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2-init/diff:/var/lib/docker/overlay2/9dde94d197f2674d5788d8fe26aa71ab9f633c4b0024328f1826d07509535ff2/diff:/var/lib/docker/overlay2/4e3f5889b74147bdfd091df113173b33ac8a3b30248f1b903d4bee51a6c835f9/diff",
"MergedDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/merged",
"UpperDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/diff",
"WorkDir": "/var/lib/docker/overlay2/8174da53ca3bff7a91a81f170fa296e5900b158e8682f67cdd5ea96f83b2b0e2/work"
},
00X07 管理镜像常用命令
OPTIONS | 说明 |
---|---|
build | 构建镜像来自Dockerfile |
histiry | 查看镜像历史 |
inspect | 显示一个或多个镜像详细信息 |
pull | 从镜像仓库拉取镜像 |
push | 推送一个镜像到镜像仓库 |
rm | 移除一个或多个镜像 |
prune | 移除未使用的镜像。没有被标记或被任何容器引用的 |
tag | 创建一个引用源镜像标记目的镜像 |
export | 导出容器文件系统到tar归档文件 |
import | 导入容器文件系统tar归档文件创建镜像 |
save | 保存一个或多个镜像到一个tar归档文件 |
load | 加载镜像来自tar归档或标准输入 |