1、镜像简介
简单说,Docker镜像是一个不包含Linux内核而又精简的Linux操作系统。
镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history <ID/NAME> 查看镜像中各层内容及大小,每层对应着Dockerfile中的一条指令。Docker镜像默认存储在/var/lib/docker/<storage-driver>中。
容器其实是在镜像的最上面加了一层读写层,在运行容器里做的任何文件改动,都会写到这个读写层。如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
Docker使用存储驱动管理镜像每层内容及可读写层的容器层。
2、修改镜像源
Docker Hub是由Docker公司负责维护的公共注册中心,包含大量的容器镜像,Docker工具默认从这个公共镜像库下载镜像。https://hub.docker.com/explore。
默认是国外的源,下载会慢,建议配置国内镜像仓:
[root@VM_190_147_centos ~]# vim /etc/docker/daemon.json
{
"registry-mirrors":["https://registry.docker-cn.com"]
}
3、镜像常用命令说明
[root@VM_190_147_centos ~]# docker --help
通过docker --help命令我们发现,镜像管理的
【镜像存储的位置】
[root@VM_190_147_centos ~]# ls /var/lib/docker/image/
overlay2
【查看镜像管理命令提示】
[root@VM_190_147_centos ~]# docker image --help
4、 镜像管理命令使用
【列出所有镜像】
[root@VM_190_147_centos ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 568c4670fa80 32 hours ago 109MB
【查看镜像历史】会显示每一层的情况
[root@VM_190_147_centos ~]# docker image history nginx
【查看镜像详情inspect】
[root@VM_190_147_centos ~]# docker image inspect nginx:latest
[
{
"Id": "sha256:568c4670fa800978e08e4a51132b995a54f8d5ae83ca133ef5546d092b864acf",
"RepoTags": [
"nginx:latest"
],
"RepoDigests": [
"nginx@sha256:5d32f60db294b5deb55d078cd4feb410ad88e6fe77500c87d3970eca97f54dba"
],
"Parent": "",
"Comment": "",
"Created": "2018-11-27T22:21:45.207738888Z",
"Container": "1455cab9c97f6945336dd97d5dfca0429eacbb739fcd362cc528ed8a175fcc7b",
"ContainerConfig": {
"Hostname": "1455cab9c97f",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.15.7-1~stretch",
"NJS_VERSION=1.15.7.0.2.6-1~stretch"
],
"Cmd": [
"/bin/sh",
"-c",
"#(nop) ",
"CMD [\"nginx\" \"-g\" \"daemon off;\"]"
],
"ArgsEscaped": true,
"Image": "sha256:cf9409661039371fa3448619fb988625e4542108921c4c8f923c5bccc51601eb",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": [],
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"DockerVersion": "17.06.2-ce",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"ExposedPorts": {
"80/tcp": {}
},
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"NGINX_VERSION=1.15.7-1~stretch",
"NJS_VERSION=1.15.7.0.2.6-1~stretch"
],
"Cmd": [
"nginx",
"-g",
"daemon off;"
],
"ArgsEscaped": true,
"Image": "sha256:cf9409661039371fa3448619fb988625e4542108921c4c8f923c5bccc51601eb",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": [],
"Labels": {
"maintainer": "NGINX Docker Maintainers <docker-maint@nginx.com>"
},
"StopSignal": "SIGTERM"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 109116878,
"VirtualSize": 109116878,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/ab2eb6e813d97b338827eae1c4982601a8961cf3b30b935f371fe925b2414959/diff:/var/lib/docker/overlay2/2f5ba371b973ed35e737c77372a62500a7b895d65534c1cc1eb1ee9b72440bc3/diff",
"MergedDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/merged",
"UpperDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/diff",
"WorkDir": "/var/lib/docker/overlay2/d6e9f31671ba501902ff947b708de737401b3d640816180c86b22a0d852732ec/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:ef68f6734aa485edf13a8509fe60e4272428deaf63f446a441b79d47fc5d17d3",
"sha256:ad5345cbb119f7c720123e3adf28b164143e4157ca6e46a629ca694e75f7825f",
"sha256:ece4f9fdef598687f23d39643bacbf2c609201b087b93bbae81b931da72d2a64"
]
},
"Metadata": {
"LastTagTime": "0001-01-01T00:00:00Z"
}
}
]
【给镜像一个标记tag】
[root@VM_190_147_centos ~]# docker image tag nginx wzy_nginx
【save保存一个镜像归档tar文件】
[root@VM_190_147_centos ~]# docker image save nginx > nginx_v1.tar
[root@VM_190_147_centos ~]# du -sh nginx_v1.tar
108M nginx_v1.tar
[root@VM_190_147_centos ~]# ll nginx_v1.tar
-rw-r--r-- 1 root root 112844800 Nov 29 14:06 nginx_v1.tar
【加载一个归档tar文件的镜像】
[root@VM_190_147_centos ~]# docker load < nginx_v1.tar
Loaded image: nginx:latest
【导入导出容器】
[root@VM_190_147_centos ~]# docker run -itd busybox
54254189b04e92e9842b73326ccae72173bc4b7b120672a03d8aff1bcf865e3e
[root@VM_190_147_centos ~]# docker export 54254189b04e > busybox.tar
[root@VM_190_147_centos ~]# docker image import busybox.tar busybox:self
sha256:0ebfcabd404262fe2e9e324438ae3c617165aabbfc7c58ae5452a2da28c813dd
【注意】save命令和export命令,以及load命令与import的区别。save和load命令针对镜像而言,export和import针对容器文件而言。
【删除所有镜像】
[root@aliyun205 ~]# docker image rm -f $(docker image ls -q)
#此命令尽肯能不要使用,一般初始化时候才使用
#其中docker image ls -q列出所有镜像的id