什么是镜像?
简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
镜像从哪里来?
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。
https://hub.docker.com/explore
更改镜像仓库源
默认是国外的源,下载会慢,建议配置国内镜像仓库:
# vi /etc/docker/daemon.json
{
"registry-mirrors": [ "https://registry.docker-cn.com"]
}
或者配置daocloud加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
重启docker
systemctl restart docker
daemon.json 为docker跨平台的配置文件,为标准引用文件
下载docker镜像
[root@docker ~]# docker pull nginx
下载指定版本镜像
[root@docker ~]# docker pull nginx:1.12
查看本地docker镜像
[root@docker ~]# docker images
REPOSITORYTAG IMAGE ID CREATED SIZE
nginxlatestcd5239a0906a 2 weeks ago 109MB
镜像与容器联系
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME>
查看镜像中各层内容及大小,每层对应着Dockerfile
中的一条指令。Docker
镜像默认存储在/var/lib/docker/<storage-driver>
中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
存储驱动
镜像管理命令
指令 | 描述 |
---|---|
ls | 列出镜像 |
build | 构建镜像来自Dockerfile |
history | 查看镜像历史 |
inspect | 显示一个或多个镜像详细信息 |
pull | 从镜像仓库拉取镜像 |
push | 推送一个镜像到镜像仓库 |
rm | 删除一个或多个镜像 |
prune | 移除未使用的镜像。没有被标记或被任何容器引用的 |
tag | 创建一个引用源镜像标记目标镜像 |
export | 导出容器文件系统到tar归档文件 |
import | 导入容器文件系统tar归档文件创建镜像 |
save | 保存一个或多个镜像到一个tar归档文件 |
load | 加载镜像来自tar归档或标准输入 |
docker image ls 列出本地镜像
[root@docker ~]# docker image ls
REPOSITORYTAG IMAGE ID CREATED SIZE
nginxlatestcd5239a0906a 2 weeks ago 109MB
nginx1.124037a5562b03 7 weeks ago 108MB
docker image history –查看镜像历史分层
[root@docker ~]# docker image history nginx
IMAGECREATED CREATED BYSIZE COMMENT
cd5239a0906a2 weeks ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) STOPSIGNAL [SIGTERM] 0B
<missing> 2 weeks ago /bin/sh -c #(nop) EXPOSE 80/tcp 0B
<missing> 2 weeks ago /bin/sh -c ln -sf /dev/stdout /var/log/nginx… 0B
<missing> 2 weeks ago /bin/sh -c set -x && apt-get update && apt… 53.7MB
<missing> 2 weeks ago /bin/sh -c #(nop) ENV NJS_VERSION=1.15.0.0.… 0B
<missing> 2 weeks ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.15.0-… 0B
<missing> 7 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
<missing> 8 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
<missing> 8 weeks ago /bin/sh -c #(nop) ADD file:ec5be7eec56a74975… 55.3MB
docker image inspect 查看镜像的具体详情
[root@docker ~]# docker image inspect nginx:1.12
[
{
"Id": "sha256:4037a5562b030fd80ec889bb885405587a52cfef898ffb7402649005dfda75ff",
"RepoTags": [
"nginx:1.12"
],
"RepoDigests": [
"nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728"
],
..................................
"sha256:d626a8ad97a1f9c1f2c4db3814751ada64f60aed927764a3f994fcd88363b659",
"sha256:683a28d1d7fd3849521491fb863d9828857ec835a4f45e78f2f8f746b1a0dd2e",
"sha256:4258832b25701af2507b45fe795c992147ed65971f9c1575e437d141dbebad08"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
docker image pull tomcat 下载镜像
[root@docker ~]# docker image pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
cc1a78bfd46b: Downloading [==================================> ] 31.19MB/45.32MB
d2c05365ee2a: Download complete
231cb0e216d3: Download complete
e8912f9d0ce2: Download complete
9bafe362f99b: Download complete
28b0652112a6: Downloading [==================================================>] 131B/131B
da23e1e20eae: Downloading [======>] 15.03MB/122.1MB
9d809d99b239: Download complete
10c61bb6d245: Download complete
50578eb745b9: Download complete
85082b9ab294: Download complete
d34391598837: Download complete
9.5 docker image push 推送镜像
docker image rm 删除镜像
[root@docker ~]# docker image rm nginx:1.12
Untagged: nginx:1.12
Untagged: nginx@sha256:72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728
Deleted: sha256:4037a5562b030fd80ec889bb885405587a52cfef898ffb7402649005dfda75ff
Deleted: sha256:8b8d76e24d92203bae8c1184f5c94f607c92e87ff5f836780f0d1301e4073111
Deleted: sha256:19f98a1ae65cc06a1f35e86ff4a7894c7f8fab2313a35503166233d470ff3752
docker tag 给镜像做标记
[root@docker ~]# docker tag nginx:latest nginx:V1
[root@docker ~]# docker image ls
REPOSITORYTAG IMAGE ID CREATED SIZE
tomcat latest 61205f6444f9 2 weeks ago 467MB
nginxV1cd5239a0906a 2 weeks ago 109MB
nginxlatestcd5239a0906a 2 weeks ago 109MB
docker image save 导出镜像
[root@docker ~]# docker image save nginx:latest > nginx.tar
[root@docker ~]# du -sh nginx.tar
108M nginx.tar
docker load 导入镜像
[root@docker ~]# docker load < nginx.tar
d626a8ad97a1: Loading layer 58.46MB/58.46MB
24ee0a3fd4b9: Loading layer 54.22MB/54.22MB
3ff93588120e: Loading layer 3.584kB/3.584kB
Loaded image: nginx:latest
docker export 导出正在运行的镜像-容器文件系统
[root@docker ~]# docker ps
CONTAINER IDIMAGE COMMAND CREATED STATUS PORTS NAMES
b54dedee27d8 busybox "sh" 14 seconds ago Up 14 seconds practical_dubinsky
[root@docker ~]# docker export b54dedee27d8 > busybox.tar
docker image import 导入正在运行的镜像-容器文件系统
[root@docker ~]# docker image import busybox.tar busybox:V1.1
sha256:a231941b6aea5b7935cc8eb9f166671e0f56e9902b3e8a5d63adbc0070bd64bd
[root@docker ~]# docker image ls
REPOSITORYTAG IMAGE ID CREATED SIZE
busyboxV1.1a231941b6aea 4 seconds ago 1.15MB