1.镜像管理
1.0 查看版本
[root@k8s1 ~]# docker version
[root@k8s1 ~]# docker -v
[root@k8s1 ~]# docker version
[root@k8s1 ~]# docker -v
[root@k8s1 ~]# docker info
bash
Client:
Context: default
Debug Mode: false #client 端是否开启 debug
Server:
Containers: 0 #当前主机运行的容器总数
Running: 0 #有几个容器是正在运行的
Paused: 0 #有几个容器是暂停的
Stopped: 0 #有几个容器是停止的
Images: 0 #当前服务器的镜像数
Server Version: 20.10.19 #服务端版本
Storage Driver: overlay2 #正在使用的存储引擎
Backing Filesystem: xfs #后端文件系统,即服务器的磁盘文件系统
Supports d_type: true #是否支持 d_type
Native Overlay Diff: true #是否支持差异数据存储
userxattr: false
Logging Driver: json-file #日志类型
Cgroup Driver: cgroupfs #Cgroups 类型
Cgroup Version: 1
Plugins: #插件
Volume: local #卷
Network: bridge host ipvlan macvlan null overlay # overlay 跨主机通信
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog # 日志类型
Swarm: inactive #是否支持 swarm
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux #已安装的容器运行时
Default Runtime: runc #默认使用的容器运行时
Init Binary: docker-init #初始化容器的守护进程,即 pid 为 1 的进程
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 #版本
runc version: v1.1.4-0-g5fd4c4d1 #runc 版本
init version: de40ad0 #init 版本
Security Options: #安全选项
apparmor #安全模块,https://docs.docker.com/engine/security/apparmor/
seccomp #安全计算模块,即制容器操作,https://docs.docker.com/engine/security/seccomp
Profile: default #默认的配置文件
Kernel Version: 5.4.0-126-generic #宿主机内核版本
Operating System: Ubuntu 20.04.4 LTS #宿主机操作系统
OSType: linux #宿主机操作系统类型
Architecture: x86_64 #宿主机架构
CPUs: 2 #宿主机 CPU 数量
Total Memory: 3.84GiB #宿主机总内存
Name: DY-Ubuntu-01 #宿主机 hostname
ID: YZQ6:756A:YPQR:XKA7:POII:EQ6Z:KUPN:BHPK:Q6QK:GYCX:56RA:PWJY #宿主机 ID
Docker Root Dir: /var/lib/docker #宿主机关于docker数据的保存目录
Debug Mode: false #server 端是否开启 debug
Registry: https://index.docker.io/v1/ #仓库路径
Labels:
Experimental: false #是否测试版
Insecure Registries:
127.0.0.0/8 #非安全的镜像仓库
Registry Mirrors:
https://pgavrk5n.mirror.aliyuncs.com/ #镜像仓库
Live Restore Enabled: false #是否开启活动重启 (重启docker-daemon 不关闭容器 )
Product License: Community Engine
WARNING: No swap limit support #系统警告信息 (没有开启 swap 资源限制 )
Client:
Context: default
Debug Mode: false #client 端是否开启 debug
Server:
Containers: 0 #当前主机运行的容器总数
Running: 0 #有几个容器是正在运行的
Paused: 0 #有几个容器是暂停的
Stopped: 0 #有几个容器是停止的
Images: 0 #当前服务器的镜像数
Server Version: 20.10.19 #服务端版本
Storage Driver: overlay2 #正在使用的存储引擎
Backing Filesystem: xfs #后端文件系统,即服务器的磁盘文件系统
Supports d_type: true #是否支持 d_type
Native Overlay Diff: true #是否支持差异数据存储
userxattr: false
Logging Driver: json-file #日志类型
Cgroup Driver: cgroupfs #Cgroups 类型
Cgroup Version: 1
Plugins: #插件
Volume: local #卷
Network: bridge host ipvlan macvlan null overlay # overlay 跨主机通信
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog # 日志类型
Swarm: inactive #是否支持 swarm
Runtimes: runc io.containerd.runc.v2 io.containerd.runtime.v1.linux #已安装的容器运行时
Default Runtime: runc #默认使用的容器运行时
Init Binary: docker-init #初始化容器的守护进程,即 pid 为 1 的进程
containerd version: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6 #版本
runc version: v1.1.4-0-g5fd4c4d1 #runc 版本
init version: de40ad0 #init 版本
Security Options: #安全选项
apparmor #安全模块,https://docs.docker.com/engine/security/apparmor/
seccomp #安全计算模块,即制容器操作,https://docs.docker.com/engine/security/seccomp
Profile: default #默认的配置文件
Kernel Version: 5.4.0-126-generic #宿主机内核版本
Operating System: Ubuntu 20.04.4 LTS #宿主机操作系统
OSType: linux #宿主机操作系统类型
Architecture: x86_64 #宿主机架构
CPUs: 2 #宿主机 CPU 数量
Total Memory: 3.84GiB #宿主机总内存
Name: DY-Ubuntu-01 #宿主机 hostname
ID: YZQ6:756A:YPQR:XKA7:POII:EQ6Z:KUPN:BHPK:Q6QK:GYCX:56RA:PWJY #宿主机 ID
Docker Root Dir: /var/lib/docker #宿主机关于docker数据的保存目录
Debug Mode: false #server 端是否开启 debug
Registry: https://index.docker.io/v1/ #仓库路径
Labels:
Experimental: false #是否测试版
Insecure Registries:
127.0.0.0/8 #非安全的镜像仓库
Registry Mirrors:
https://pgavrk5n.mirror.aliyuncs.com/ #镜像仓库
Live Restore Enabled: false #是否开启活动重启 (重启docker-daemon 不关闭容器 )
Product License: Community Engine
WARNING: No swap limit support #系统警告信息 (没有开启 swap 资源限制 )
1.1查看镜像
bash
docker images | docker image ls;
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符),默认为latest
IMAGE ID #镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED #镜像在仓库中被创建时间
VIRTUAL SIZE #镜像的大小
docker images | docker image ls;
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
REPOSITORY #镜像所属的仓库名称
TAG #镜像版本号(标识符),默认为latest
IMAGE ID #镜像唯一ID标识,如果ID相同,说明是同一个镜像有多个名称
CREATED #镜像在仓库中被创建时间
VIRTUAL SIZE #镜像的大小
查看镜像id
语法,docker help images
bash
[root@appman containers]# docker help images;
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
[root@node1 ~]# docker images -q #查看镜像id
c059bfaa849c
feb5d9fea6a5
[root@node1 ~]# docker images --no-trunc #显示完整的ImageID
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18 10 months ago 5.59MB
hello-world latest sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412 12 months ago 13.3kB
[root@node1 ~]# docker image inspect alpine #查看指定镜像的详细信息
[root@appman containers]# docker help images;
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
-a, --all Show all images (default hides intermediate images)
--digests Show digests
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print images using a Go template
--no-trunc Don't truncate output
-q, --quiet Only show image IDs
[root@node1 ~]# docker images -q #查看镜像id
c059bfaa849c
feb5d9fea6a5
[root@node1 ~]# docker images --no-trunc #显示完整的ImageID
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18 10 months ago 5.59MB
hello-world latest sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412 12 months ago 13.3kB
[root@node1 ~]# docker image inspect alpine #查看指定镜像的详细信息
查看镜像详细信息
#查看镜像详细信息
docker inspect nginx
#查看镜像详细信息
docker inspect nginx
1.2 检索镜像
bash
[root@docker ~]# docker search nginx
docker search -f=stars=100 nginx #搜索点赞大于100的nginx镜像
docker search --limit 3 nginx #搜索三个结果
docker image history nginx #查看镜像分层历史
[root@docker ~]# docker search nginx
docker search -f=stars=100 nginx #搜索点赞大于100的nginx镜像
docker search --limit 3 nginx #搜索三个结果
docker image history nginx #查看镜像分层历史
1.3 拉取镜像
bash
docker pull nginx
docker pull nginx
bash
#格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签
[root@docker ~]# docker pull nginx
[root@node1 ~]# docker run -it -d --name alpine-1 --rm alpine #后台交互运行一个名称为alpine-1的alpine容器,停止容器后删除容器
[root@node1 ~]# docker exec -it alpine-1 /bin/sh #进入alpine-1容器,指定bash类型为sh
/ # vi /etc/apk/repositories #修改源替换成阿里源
https://mirrors.aliyun.com/alpine/v3.15/main
https://mirrors.aliyun.com/alpine/v3.15/community
/ # apk update #更新源
/ # apk add vim #安装软件
/ # apk del openssh #删除软件
/ # apk info nginx #显示软件的详细信息
/ # apk manifest nginx #显示校验
# Debian(ubuntu)系统建议安装的基础包
# apt update #安装软件前需要先更新索引
# apt install procps #提供top,ps,free等命令
# apt install psmisc #提供pstree,killall等命令
# apt install iputils-ping #提供ping命令
# apt install net-tools #提供netstat网络工具等
# apt install iproute2 #提供ip,ss网络工具等
#格式:docker pull 仓库名称[:标签]
#如果下载镜像时不指定标签,则默认会下载仓库中最新版本的镜像,即选择标签为 latest 标签
[root@docker ~]# docker pull nginx
[root@node1 ~]# docker run -it -d --name alpine-1 --rm alpine #后台交互运行一个名称为alpine-1的alpine容器,停止容器后删除容器
[root@node1 ~]# docker exec -it alpine-1 /bin/sh #进入alpine-1容器,指定bash类型为sh
/ # vi /etc/apk/repositories #修改源替换成阿里源
https://mirrors.aliyun.com/alpine/v3.15/main
https://mirrors.aliyun.com/alpine/v3.15/community
/ # apk update #更新源
/ # apk add vim #安装软件
/ # apk del openssh #删除软件
/ # apk info nginx #显示软件的详细信息
/ # apk manifest nginx #显示校验
# Debian(ubuntu)系统建议安装的基础包
# apt update #安装软件前需要先更新索引
# apt install procps #提供top,ps,free等命令
# apt install psmisc #提供pstree,killall等命令
# apt install iputils-ping #提供ping命令
# apt install net-tools #提供netstat网络工具等
# apt install iproute2 #提供ip,ss网络工具等
1.4 上传镜像
bash
#配置tag
docker tag nginx:latest hsuing/nginx:latest
docker login
docker push hsuing/nginx:latest
#配置tag
docker tag nginx:latest hsuing/nginx:latest
docker login
docker push hsuing/nginx:latest
1.5 保存镜像
bash
docker save [image] -o FILE /
docker save [image] > FILE
docker save nginx:latest > nginx.tar
docker save [image] -o FILE /
docker save [image] > FILE
docker save nginx:latest > nginx.tar
1.6 镜像导入
bash
docker load -i FILE
docker load -i nginx.tar
docker load -i FILE
docker load -i nginx.tar
save
保存镜像到一个tar包; -o, --output="" Write to an file
docker save -o save_name image_name
bash
#查看
[root@k8s1 ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 62d49f9bab67 8 days ago 133MB
#保存
[root@k8s1 ~]# docker save -o nginx_save.tar nginx
[root@k8s1 ~]# ls
nginx_save.tar
#查看
[root@k8s1 ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 62d49f9bab67 8 days ago 133MB
#保存
[root@k8s1 ~]# docker save -o nginx_save.tar nginx
[root@k8s1 ~]# ls
nginx_save.tar
load 载入
bash
#save 导入
[root@k8s1 ~]# docker load -i nginx_save.tar
7e718b9c0c8c: Loading layer 72.52MB/72.52MB
4dc529e519c4: Loading layer 64.81MB/64.81MB
23c959acc3d0: Loading layer 3.072kB/3.072kB
15aac1be5f02: Loading layer 4.096kB/4.096kB
974e9faf62f1: Loading layer 3.584kB/3.584kB
64ee8c6d0de0: Loading layer 7.168kB/7.168kB
Loaded image: nginx:latest
或者
[root@k8s1 ~]# docker load < nginx_save.tar
#save 导入
[root@k8s1 ~]# docker load -i nginx_save.tar
7e718b9c0c8c: Loading layer 72.52MB/72.52MB
4dc529e519c4: Loading layer 64.81MB/64.81MB
23c959acc3d0: Loading layer 3.072kB/3.072kB
15aac1be5f02: Loading layer 4.096kB/4.096kB
974e9faf62f1: Loading layer 3.584kB/3.584kB
64ee8c6d0de0: Loading layer 7.168kB/7.168kB
Loaded image: nginx:latest
或者
[root@k8s1 ~]# docker load < nginx_save.tar
# 加载一个tar包格式的镜像; -i, --input="" Read from a tar archive file
< 等于 参数 -i
load 导入的是元数据信息,包含标签
export
bash
#export 和save 的区别
[root@k8s1 ~]# docker help save
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
-o, --output string Write to a file, instead of STDOUT
[root@k8s1 ~]# docker help export
Usage: docker export [OPTIONS] CONTAINER
Export a container's filesystem as a tar archive
Options:
-o, --output string Write to a file, instead of STDOUT
#export 和save 的区别
[root@k8s1 ~]# docker help save
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
Save one or more images to a tar archive (streamed to STDOUT by default)
Options:
-o, --output string Write to a file, instead of STDOUT
[root@k8s1 ~]# docker help export
Usage: docker export [OPTIONS] CONTAINER
Export a container's filesystem as a tar archive
Options:
-o, --output string Write to a file, instead of STDOUT
- 导出单个镜像
bash
#方法1
[root@node1 ~]# docker save -o alpine.tar alpine
#方法2
[root@node1 ~]# docker save alpine > alpine1.tar
#方法1
[root@node1 ~]# docker save -o alpine.tar alpine
#方法2
[root@node1 ~]# docker save alpine > alpine1.tar
- 导出多个镜像至一个文件
bash
#导出多个镜像至一个文件
#方法1
[root@node1 ~]# docker save -o all1.tar alpine hello-world
#方法2
[root@node1 ~]# docker save alpine hello-world -o all.tar
#方法3
[root@node1 ~]# docker save alpine hello-world > all2.tar
#导出多个镜像至一个文件
#方法1
[root@node1 ~]# docker save -o all1.tar alpine hello-world
#方法2
[root@node1 ~]# docker save alpine hello-world -o all.tar
#方法3
[root@node1 ~]# docker save alpine hello-world > all2.tar
- 导出所有镜像至一个文件
bash
#导出所有镜像至一个文件
#方法1
[root@node1 ~]# docker save `docker images | awk 'NR>1{print $1":"$2}'` -o all4.tar #导出所有镜像到一个打包文件,此方法导入后可以看REPOSITORY和TAG
#方法2
[root@node1 ~]# docker image save `docker image ls --format "{{.Repository}}:{{.Tag}}"` -o all5.tar
#将所有镜像导入到一个文件中,此方法导入后可以看REPOSITORY和TA
#导出所有镜像至一个文件
#方法1
[root@node1 ~]# docker save `docker images | awk 'NR>1{print $1":"$2}'` -o all4.tar #导出所有镜像到一个打包文件,此方法导入后可以看REPOSITORY和TAG
#方法2
[root@node1 ~]# docker image save `docker image ls --format "{{.Repository}}:{{.Tag}}"` -o all5.tar
#将所有镜像导入到一个文件中,此方法导入后可以看REPOSITORY和TA
- 导出所有镜像至不同的文件中
bash
#导出所有镜像至不同的文件中
#方法1
[root@node1 ~]# docker images | awk 'NR!=1{print $1,$2}' | while read repo tag ;do docker save ${repo}:${tag} -o ${repo}-${tag}.tar; done #导出所有镜像至不同的文件中
#方法2
[root@node1 ~]# for i in `docker images --format "{{.Repository}}:{{.Tag}}"`; do docker save $i -o `echo $i|cut -d: -f1`.tar; done #导出所有镜像至不同的文件中
#导出所有镜像至不同的文件中
#方法1
[root@node1 ~]# docker images | awk 'NR!=1{print $1,$2}' | while read repo tag ;do docker save ${repo}:${tag} -o ${repo}-${tag}.tar; done #导出所有镜像至不同的文件中
#方法2
[root@node1 ~]# for i in `docker images --format "{{.Repository}}:{{.Tag}}"`; do docker save $i -o `echo $i|cut -d: -f1`.tar; done #导出所有镜像至不同的文件中
export 是运行之后的导出
bash
[root@k8s1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6ad15f24f82 nginx "/docker-entrypoint.…" 33 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-server
#docker export 容器名字 > name_export.tar
[root@k8s1 ~]# docker export a6 > nginx_export.tar
[root@k8s1 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a6ad15f24f82 nginx "/docker-entrypoint.…" 33 seconds ago Up 31 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx-server
#docker export 容器名字 > name_export.tar
[root@k8s1 ~]# docker export a6 > nginx_export.tar
import
bash
[root@k8s1 ~]# cat nginx_export.tar |docker import - nginx
sha256:4bb1f91f1eaf739837e3a9259d5634188ec44c98b18c74c3b52c22af54d0e118
# 或者在导入的时候指定tag
cat nginx_export.tar | docker import - han/nginx:7.2
#在启动nginx
[root@k8s1 ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4bb1f91f1eaf About a minute ago 131MB
[root@k8s1 ~]# docker run -d --name nginx-server --rm -p 80:80 nginx
docker: Error response from daemon: No command specified.
[root@k8s1 ~]# cat nginx_export.tar |docker import - nginx
sha256:4bb1f91f1eaf739837e3a9259d5634188ec44c98b18c74c3b52c22af54d0e118
# 或者在导入的时候指定tag
cat nginx_export.tar | docker import - han/nginx:7.2
#在启动nginx
[root@k8s1 ~]# docker images;
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4bb1f91f1eaf About a minute ago 131MB
[root@k8s1 ~]# docker run -d --name nginx-server --rm -p 80:80 nginx
docker: Error response from daemon: No command specified.
import 导入的时候不能用原来的启动方式启动
[!WARNING]
注:
用户既可以使用docker load来导入镜像存储文件到本地镜像库,
也可以使用docker import来导入一个容器快照到本地镜像库。(这个体积更小)
两者的区别在于
容器快照文件将丢失所有的历史记录和元数据信息(即仅保存容器当时的快照状态),容器快照文件导入时可以重新指定标签等元数据信息。
镜像存储文件将保存完整记录,体积也大。
export是当前的状态,docker save 是针对镜像images。
docker images --tree 看到他的历史记录。Docker的文件系统AUFS,一种“增量文件系统”,用户所做修改以增量的方式保存,所以才能看到这些历史的增量。
推荐使用export
1.7 查看镜像历史
bash
[root@appman ~]# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
01f29b872827 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:bb1fa1d9d012ae826… 77.8MB
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG RELEASE 0B
[root@appman ~]# docker history ubuntu
IMAGE CREATED CREATED BY SIZE COMMENT
01f29b872827 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:bb1fa1d9d012ae826… 77.8MB
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) LABEL org.opencontainers.… 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG LAUNCHPAD_BUILD_ARCH 0B
<missing> 3 weeks ago /bin/sh -c #(nop) ARG RELEASE 0B
- 脚本形式查查
bash
#!/bin/bash
case "$OSTYPE" in
linux*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tac | # reverse the file
sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed 's, *&& *, \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
darwin*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tail -r | # reverse the file
sed -E 's,^(\|3.*)?/bin/(ba)?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed $'s, *&& *, \\\ \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
*)
echo "unknown OSTYPE: $OSTYPE"
;;
esac
#!/bin/bash
case "$OSTYPE" in
linux*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tac | # reverse the file
sed 's,^\(|3.*\)\?/bin/\(ba\)\?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed 's, *&& *, \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
darwin*)
docker history --no-trunc --format "{{.CreatedBy}}" $1 | # extract information from layers
tail -r | # reverse the file
sed -E 's,^(\|3.*)?/bin/(ba)?sh -c,RUN,' | # change /bin/(ba)?sh calls to RUN
sed 's,^RUN #(nop) *,,' | # remove RUN #(nop) calls for ENV,LABEL...
sed $'s, *&& *, \\\ \\\n \&\& ,g' # pretty print multi command lines following Docker best practices
;;
*)
echo "unknown OSTYPE: $OSTYPE"
;;
esac
1.8 删除镜像
bash
docker rmi [image_name]
docker image prune
-清理不再使用的无标签镜像、悬挂镜像层以及未使用的缓存
-它会删除没有标签的临时镜像和镜像层,从而释放磁盘空间
#dangling images表示TAG为<none>的镜像
[root@DY-Ubuntu-01 ~]#docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@DY-Ubuntu-01 ~]#docker system prune -f -a #清除不再使用的镜像
[root@DY-Ubuntu-01 ~]#docker rmi nginx
[root@DY-Ubuntu-01 ~]#docker rmi -f hello-world #强制删除正在使用的镜像,也会删除对应的容器
[root@DY-Ubuntu-01 ~]#docker rmi nginx httpd #删除多个镜像
-----
[root@node1 ~]# docker image prune #清理dangling虚无镜像(没被标记且没被其它任何镜像引用的镜像)
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@node1 ~]# docker image prune -a -f #清理dangling虚无镜像以及不再使用的镜像
Deleted Images:
untagged: hello-world:latest
untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
deleted: sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
[root@k8s1 ~]# docker rmi image_id
#或者
[root@k8s1 ~]# docker rmi -f image_id
-f ---> 强制删除
#强制删除全部镜像
[root@k8s1 ~]# docker rmi -f $(docker images -q)
#删除悬空 的镜像
docker rmi $(docker images | grep "^<none>" | awk '{print $3}')
docker rmi $(docker images -qf dangling=true)
docker rmi [image_name]
docker image prune
-清理不再使用的无标签镜像、悬挂镜像层以及未使用的缓存
-它会删除没有标签的临时镜像和镜像层,从而释放磁盘空间
#dangling images表示TAG为<none>的镜像
[root@DY-Ubuntu-01 ~]#docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@DY-Ubuntu-01 ~]#docker system prune -f -a #清除不再使用的镜像
[root@DY-Ubuntu-01 ~]#docker rmi nginx
[root@DY-Ubuntu-01 ~]#docker rmi -f hello-world #强制删除正在使用的镜像,也会删除对应的容器
[root@DY-Ubuntu-01 ~]#docker rmi nginx httpd #删除多个镜像
-----
[root@node1 ~]# docker image prune #清理dangling虚无镜像(没被标记且没被其它任何镜像引用的镜像)
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
[root@node1 ~]# docker image prune -a -f #清理dangling虚无镜像以及不再使用的镜像
Deleted Images:
untagged: hello-world:latest
untagged: hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359
deleted: sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
[root@k8s1 ~]# docker rmi image_id
#或者
[root@k8s1 ~]# docker rmi -f image_id
-f ---> 强制删除
#强制删除全部镜像
[root@k8s1 ~]# docker rmi -f $(docker images -q)
#删除悬空 的镜像
docker rmi $(docker images | grep "^<none>" | awk '{print $3}')
docker rmi $(docker images -qf dangling=true)