目 录CONTENT

文章目录

Docker 入门系列(4)- Docker 镜像基础操作

ZERO
2022-06-18 / 0 评论 / 0 点赞 / 48 阅读 / 0 字

文章转载自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 imagesdocker image ls 两个命令并无实质区别

镜像加速配置

镜像默认从 docker hub下载,速度较慢,国内建议配置镜像加速。此处以阿里云提供的镜像加速为例

注册阿里云获取加速地址

注册阿里云 – 登录进入控制台 – 容器镜像服务 – 镜像加速器
image-1655566408038

配置镜像加速器

# 创建配置目录(如果不存在)
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/

检索框输入想要的镜像
image-1655566575214

检索出来的镜像仓库列表(带 Offcial Image 表示由官方维护,一般都会选择官方维护版本)

image-1655566593257

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 中获取

image-1655567015637

下载

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:镜像版本号(标识),默认下载 LATEST
  • IMAGE 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
0

评论区