文章转载自: https://www.skynemo.cn/archives/04-docker-images-manage
本文中所有描述均以 Docker version 20.10.x 为基准
Docker镜像
镜像是容器的模板。当运行容器时,如果使用的镜像在本地中不存在,docker 就会自动从 docker 镜像仓库中下载(默认从 Docker Hub 公共镜像源下载)
在工作中,一般都是自己搜索需要的镜像,然后下载使用。对于一些无法连接互联网的生产环境,可以在互联网下载镜像后再拷贝导入
常用镜像操作:搜索、下载、导出、导入、删除、打标签
常用命令总结
# 搜索镜像
docker search nginx
# 下载镜像
docker pull nginx
# 列出本地镜像
docker images
# 保存镜像到文件
docker save nginx:latest > /opt/nginx_latest.tar
# 从文件导入镜像
docker load < /opt/nginx_latest.tar
# 删除镜像
docker rmi 镜像 ID / 镜像名称:tag
Docker镜像使用
docker 命令官方详解:https://docs.docker.com/engine/reference/commandline/cli/
注:docker 镜像管理命令大多拥有两种书写格式,例如:
docker images
与docker image ls
两个命令并无实质区别
镜像加速配置
镜像默认从 docker hub下载,速度较慢,国内建议配置镜像加速。此处以阿里云提供的镜像加速为例
注册阿里云获取加速地址
注册阿里云 – 登录进入控制台 – 容器镜像服务 – 镜像加速器
配置镜像加速器
# 创建配置目录(如果不存在)
root@docker:~# mkdir -p /etc/docker
# 新增关于镜像加速的配置
root@docker:~# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://sqr9a2ic.mirror.aliyuncs.com"]
}
# 重新加载配置
root@docker:~# systemctl daemon-reload
root@docker:~# systemctl restart docker
查看配置的加速器地址
root@docker:~# docker info | grep -A1 Mirrors
Registry Mirrors:
https://sqr9a2ic.mirror.aliyuncs.com/
搜索镜像
官方网站镜像搜索
镜像仓库官方网站: https://hub.docker.com/
检索框输入想要的镜像
检索出来的镜像仓库列表(带 Offcial Image 表示由官方维护,一般都会选择官方维护版本)
docker search
命令搜索
命令格式
root@docker:~# docker search --help
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
示例一
# OFFICIAL 表示镜像由官方提供
# AUTOMATED 表示使用了第三方 docker 服务辅助编译的的镜像
root@docker:~# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16693 [OK]
bitnami/nginx Bitnami nginx Docker Image 123 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 44
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 17 [OK]
rancher/nginx-ingress-controller 10
ibmcom/nginx-ingress-controller Docker Image for IBM Cloud Private-CE (Commu… 4
bitnami/nginx-ldap-auth-daemon 3
......
示例二 - 过滤查找的镜像
# 过滤点赞数超过2000的镜像
root@docker:~# docker search nginx -f=stars=2000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 16693 [OK]
下载镜像
命令格式
root@docker:~# docker pull --help
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 或
root@docker:~# docker image pull --help
Usage: docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
# NAME : 镜像名
# TAG : 版本号,未指定时默认下载最新版镜像
# DIGEST: 摘要信息,一个镜像的唯一标识
完整的镜像下载地址
# 完整的镜像下载地址
# 镜像仓库地址(registry):端口/命名空间、项目名称、用户名/镜像仓库名称(REPOSITORY):tag
# 示例
# harbor.skynemo.com:8080/nemo/nginx-ubuntu:20210411_231140
镜像默认保存路径
下载的镜像默认存储路径为: /var/lib/docker/<存储引擎名>/<镜像层ID>
,可以通过在 daemon.json
中配置 data-root
进行修改
# 示例
root@docker:~# ll /var/lib/docker/overlay2/
total 36
drwx--x--- 9 root root 4096 Apr 28 03:09 ./
drwx--x--- 13 root root 4096 Apr 28 02:20 ../
drwx--x--- 4 root root 4096 Apr 28 03:09 23798e676fe345de9fa505817348895f52a2b488df1056902213be3556f3d533/
drwx--x--- 4 root root 4096 Apr 28 03:09 2fc33f2bd08cc931de8ee4a073f49db0933f86861f55dd764ae6dd7b418610bd/
drwx--x--- 4 root root 4096 Apr 28 03:09 b51ed474dc0632bc598d95cb3c1a6fca4be9cb27f907ff8b0712b4883aa90a61/
drwx--x--- 4 root root 4096 Apr 28 03:09 c2c9ef08733781b4510e37f7df7de11d839f7ec17305d0848b36f1affc9ca134/
drwx--x--- 4 root root 4096 Apr 28 03:09 db123ce08a1f324518a4c66c484ffb1dfdfda9546fdb4bb43519ee3162e7f287/
drwx--x--- 3 root root 4096 Apr 28 03:09 f1f40cdbe4ec5ee3980831ff504a118d9cdeeec2a8e0a3d3998662bc9f844ab3/
drwx------ 2 root root 4096 Apr 28 03:09 l/
镜像下载说明
# 示例
root@docker:~# ll /var/lib/docker/overlay2/
total 36
drwx--x--- 9 root root 4096 Apr 28 03:09 ./
drwx--x--- 13 root root 4096 Apr 28 02:20 ../
drwx--x--- 4 root root 4096 Apr 28 03:09 23798e676fe345de9fa505817348895f52a2b488df1056902213be3556f3d533/
drwx--x--- 4 root root 4096 Apr 28 03:09 2fc33f2bd08cc931de8ee4a073f49db0933f86861f55dd764ae6dd7b418610bd/
drwx--x--- 4 root root 4096 Apr 28 03:09 b51ed474dc0632bc598d95cb3c1a6fca4be9cb27f907ff8b0712b4883aa90a61/
drwx--x--- 4 root root 4096 Apr 28 03:09 c2c9ef08733781b4510e37f7df7de11d839f7ec17305d0848b36f1affc9ca134/
drwx--x--- 4 root root 4096 Apr 28 03:09 db123ce08a1f324518a4c66c484ffb1dfdfda9546fdb4bb43519ee3162e7f287/
drwx--x--- 3 root root 4096 Apr 28 03:09 f1f40cdbe4ec5ee3980831ff504a118d9cdeeec2a8e0a3d3998662bc9f844ab3/
drwx------ 2 root root 4096 Apr 28 03:09 l/
示例一 - 使用TAG下载指定版本的镜像
# 此处使用了完整的下载地址,如果是默认地址可以省略
root@docker:~# docker pull docker.io/library/mysql:5.7.36
5.7.36: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for
示例二 - 使用DIGEST下载指定版本镜像
DIGEST可以在docker hub 中获取
下载
root@docker:~# docker pull alpine:3.15.4@sha256:a777c9c66ba177ccfea23f2a216ff6721e78a662cd17019488c417135299cd89
docker.io/library/alpine@sha256:a777c9c66ba177ccfea23f2a216ff6721e78a662cd17019488c417135299cd89: Pulling from library/alpine
df9b9388f04a: Pull complete
Digest: sha256:a777c9c66ba177ccfea23f2a216ff6721e78a662cd17019488c417135299cd89
Status: Downloaded newer image for alpine@sha256:a777c9c66ba177ccfea23f2a216ff6721e78a662cd17019488c417135299cd89
docker.io/library/alpine:3.15.4@sha256:a777c9c66ba177ccfea23f2a216ff6721e78a662cd17019488c417135299cd89
# 查看下载
root@docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine <none> 0ac33e5f5afa 3 weeks ago 5.57MB
查看本地镜像列表
命令格式
root@docker:~# docker images --help
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]
# 或
root@docker:~# docker image ls --help
Usage: docker image ls [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@docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine <none> 0ac33e5f5afa 3 weeks ago 5.57MB
nginx latest 605c77e624dd 3 months ago 141MB
mysql 5.7.36 c20987f18b13 4 months ago 448MB
检索显示信息说明
REPOSITORY
:镜像所属的仓库名称TAG
:镜像版本号(标识),默认下载 LATESTIMAGE ID
:镜像的唯一标识,如果 ID 相同,则说明是同一个镜像有多个名称CREATED
:镜像在仓库中被创建的时间SIZE
:镜像的大小
REPOSITORY 仓库说明
- REPOSITORY 由某个特定的 docker 镜像的所有迭代版本组成的镜像仓库,例如:nginx、mysql
- 一个 Registry 中可以存在多个 Repository,例如 docker hub 中存在 nginx、mysql、alpine 等仓库
- Repository 可分为 顶级仓库 和 用户仓库
- Repository 用户仓库名称一般格式为 用户名/仓库名
- 每个 Repository 仓库可以包含多个 Tag(标签),每个标签对应一个镜像
示例二 - 只显示镜像ID
# 常用于批量操作(删除或显示信息等操作)镜像
root@docker:~# docker images -q
0ac33e5f5afa
605c77e624dd
c20987f18b13
示例三 - 只查看指定 REPOSITORY 的镜像
root@docker:~# docker images mysql
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7.36 c20987f18b13 4 months ago 448MB
查看镜像详细信息
命令格式
root@docker:~# docker inspect --help
Usage: docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes if the type is container
--type string Return JSON for specified type
示例 - 查看指定镜像的详细信息
root@docker:~# docker inspect mysql:5.7.36
[
{
"Id": "sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76",
"RepoTags": [
"mysql:5.7.36"
],
"RepoDigests": [
"mysql@sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94"
],
"Parent": "",
"Comment": "",
"Created": "2021-12-21T02:56:51.419272329Z",
......
镜像导出
命令格式
root@docker:~# docker save --help
Usage: docker save [OPTIONS] IMAGE [IMAGE...]
# 或
root@docker:~# docker image save --help
Usage: docker image 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
常用方法
docker save -o /path/file.tar IMAGE1 IMAGE2 ...
docker save IMAGE1 IMAGE2... > /path/file.tar
示例 - 镜像导出
root@docker:~# docker save mysql:5.7.36 nginx > myimages.tar
删除镜像
命令格式
root@docker:~# docker rmi --help
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]
# 或
root@docker:~# docker image rm --help
Usage: docker image rm [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
-f, --force Force removal of the image
--no-prune Do not delete untagged parents
示例 - 删除一个或多个镜像
root@docker:~# docker rmi nginx
Untagged: nginx:latest
Deleted: sha256:605c77e624ddb75e6110f997c58876baa13f8754486b461117934b24a9dc3a85
Deleted: sha256:b625d8e29573fa369e799ca7c5df8b7a902126d2b7cbeb390af59e4b9e1210c5
Deleted: sha256:7850d382fb05e393e211067c5ca0aada2111fcbe550a90fed04d1c634bd31a14
Deleted: sha256:02b80ac2055edd757a996c3d554e6a8906fd3521e14d1227440afd5163a5f1c4
Deleted: sha256:b92aa5824592ecb46e6d169f8e694a99150ccef01a2aabea7b9c02356cdabe7c
Deleted: sha256:780238f18c540007376dd5e904f583896a69fe620876cabc06977a3af4ba4fb5
Deleted: sha256:2edcec3590a4ec7f40cf0743c15d78fb39d8326bc029073b41ef9727da6c851f
示例 - 强制删除镜像(同时删除对应容器)
# 需要容器不在running状态
root@docker:~# docker rmi mysql:5.7.36 -f
Untagged: mysql:5.7.36
Deleted: sha256:c20987f18b130f9d144c9828df630417e2a9523148930dc3963e9d0dab302a76
Deleted: sha256:6567396b065ee734fb2dbb80c8923324a778426dfd01969f091f1ab2d52c7989
Deleted: sha256:0910f12649d514b471f1583a16f672ab67e3d29d9833a15dc2df50dd5536e40f
Deleted: sha256:6682af2fb40555c448b84711c7302d0f86fc716bbe9c7dc7dbd739ef9d757150
Deleted: sha256:5c062c3ac20f576d24454e74781511a5f96739f289edaadf2de934d06e910b92
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
示例 - 删除所有镜像
root@docker:~# docker rmi -f $(docker images -q)
# 或
root@docker:~# docker rmi -f `docker images -q`
镜像导入
命令格式
root@docker:~# docker load --help
Usage: docker load [OPTIONS]
# 或
root@docker:~# docker image load --help
Usage: docker image load [OPTIONS]
Load an image from a tar archive or STDIN
Options:
-i, --input string Read from tar archive file, instead of STDIN
-q, --quiet Suppress the load output
常用方法
docker load -i /path/file.tar
docker load < /path/file.tar
示例 - 导入镜像
# 若压缩包中有多个镜像,则一次导入多个镜像
root@docker:~# docker load < myimages.tar
2edcec3590a4: Loading layer [==================================================>] 83.86MB/83.86MB
e379e8aedd4d: Loading layer [==================================================>] 62MB/62MB
b8d6e692a25e: Loading layer [==================================================>] 3.072kB/3.072kB
f1db227348d0: Loading layer [==================================================>] 4.096kB/4.096kB
32ce5f6a5106: Loading layer [==================================================>] 3.584kB/3.584kB
d874fd2bc83b: Loading layer [==================================================>] 7.168kB/7.168kB
Loaded image: nginx:latest
ad6b69b54919: Loading layer [==================================================>] 72.55MB/72.55MB
fba7b131c5c3: Loading layer [==================================================>] 338.4kB/338.4kB
0798f2528e83: Loading layer [==================================================>] 9.556MB/9.556MB
a0c2a050fee2: Loading layer [==================================================>] 4.202MB/4.202MB
d7a777f6c3a4: Loading layer [==================================================>] 2.048kB/2.048kB
0d17fee8db40: Loading layer [==================================================>] 53.77MB/53.77MB
aad27784b762: Loading layer [==================================================>] 5.632kB/5.632kB
9b64bb048d04: Loading layer [==================================================>] 3.584kB/3.584kB
35ba198e64f5: Loading layer [==================================================>] 313.2MB/313.2MB
789f3aa31b3f: Loading layer [==================================================>] 17.92kB/17.92kB
e889c671872c: Loading layer [==================================================>] 1.536kB/1.536kB
Loaded image: mysql:5.7.36
镜像打标签
镜像名称通常需要遵守一定命名规范,才能够上传到指定的仓库,打标签(tag)可以给镜像起别名,以便上传到仓库,也可以标识软件版本方便后期查找
标签格式
镜像仓库地址(registry):端口/命名空间、项目名称、用户名/镜像仓库名称(REPOSITORY):tag
注:命名空间用来对应一个公司、组织或个人用户,例如 Aliyun、Obama,或者是一个项目的名称。不推荐用来对应一个模块或系统,例如 Tomcat、CentOS,应用或模块推荐使用仓库名进行管理
命令格式
root@docker:~# docker tag --help
Usage: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 或
root@docker:~# docker image tag --help
Usage: docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
# TARGET_IMAGE[:TAG] 格式
# 仓库主机 FQDN 或 IP [:PORT]/项目名或用户名/image名称
示例 - 给镜像打标签
# 查看原镜像
root@docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 3 months ago 141MB
# 打标签
root@docker:~# docker tag nginx:latest mynginx:1.0
# 查看打标签后的镜像,IMAGE ID 不会改变
root@docker:~# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mynginx 1.0 605c77e624dd 3 months ago 141MB
nginx latest 605c77e624dd 3 months ago 141MB
评论区