欢迎光临范阳布衣的运维博客
分享工作和学习中的知识、技术

docker-镜像管理

什么是镜像?

简单说,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
未经允许不得转载:范阳布衣 » docker-镜像管理