Docker镜像使用

令狐建修
2023-12-01

2.1 Docker镜像拉取

命令:docker pull Name[:Tag] ,如下

docker pull ubuntu:18.04
  1. 此处的[:tag]为可选信息,如不填写,默认为tag为 latest ,一般latest会随着最新版本变动而变动,如对版本有明确需求,应当添加指定版本。
  2. 此处的Image:tag 中没有添加镜像仓库地址,但默认从dockerhub中下载,例如:docker pull iregister.hub.docker.com/ubuntu:18.04 。
[root@123 ~]# docker pull ubuntu:18.04
Trying to pull repository docker.io/library/ubuntu ... 
18.04: Pulling from docker.io/library/ubuntu
e4ca327ec0e7: Pull complete 
Digest: sha256:9bc830af2bef73276515a29aa896eedfa7bdf4bdbc5c1063b4c457a4bbb8cd79
Status: Downloaded newer image for docker.io/ubuntu:18.04

2.2 Docker镜像查看

2.2.1 列出本地已有镜像

命令:docker imagesdocker image ls
如:

[root@123 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               54919e10a95d        10 days ago         63.1 MB

REPOSITORY: 镜像仓库
TAG : 镜像版本
IMAGE ID :镜像id,如果两个镜像的ID相同, 说明它们实际上指向了同一个镜像, 只是具有不同标签名称而已;
CREATED : 创建时间
SIZE :镜像大小

docker images 有一些子命令,完成一些特殊需求
-a 显示所有镜像
-f 根据指定条件过滤
--format 控制台格式
--no-trunc 是否截取显示
-q 只显示镜像id

#获取所有镜像
[root@123~]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               54919e10a95d        10 days ago         63.1 MB

#获取悬挂镜像(没有对应名称和tag,其上层不会被任何镜像依赖,通常可删除)
[root@123 ~]# docker images -f "dangling=true"
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

# 获取仓库与标签两列名称
[root@123 ~]# docker images --format {{.Repository}},{{.Tag}}
docker.io/ubuntu,18.04

[root@123 ~]# docker images --no-trunc
REPOSITORY          TAG                 IMAGE ID                                                                  CREATED             SIZE
docker.io/ubuntu    18.04               sha256:54919e10a95d6f756f7286dc0fa6b3e25b637a7f90e361504b0b14ab6762a547   10 days ago         63.1 MB

[root@123 ~]# docker images -q
54919e10a95d



#删除悬挂镜像
$ docker image –filter “dangling=true” -q | xargs docker rmi

2.2.2 添加镜像标签

命令: docker tag Name:tag Name:newTag

添加标签后,新标签的镜像与原有镜像id,创建时间,大小相同,仅tag不同

[root@123 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               54919e10a95d        10 days ago         63.1 MB
[root@123 ~]# docker tag docker.io/ubuntu:18.04 docker.io/ubuntu:v1
[root@123 ~]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               54919e10a95d        10 days ago         63.1 MB
docker.io/ubuntu    v1                  54919e10a95d        10 days ago         63.1 MB

2.2.3 查看镜像详细信息

命令 docker inspect
显示镜像的详细信息,如:容器配置,环境变量,Cmd等等

[root@123 ~]# docker inspect docker.io/ubuntu:18.04
[
    {
        "Id": "sha256:54919e10a95d6f756f7286dc0fa6b3e25b637a7f90e361504b0b14ab6762a547",

        ...........
        "GraphDriver": {
            "Name": "overlay2",
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/f36b0116823d0588f292a60e9b9f22ef16ea38396c750bc636ee95a76b36118e/merged",
                "UpperDir": "/var/lib/docker/overlay2/f36b0116823d0588f292a60e9b9f22ef16ea38396c750bc636ee95a76b36118e/diff",
                "WorkDir": "/var/lib/docker/overlay2/f36b0116823d0588f292a60e9b9f22ef16ea38396c750bc636ee95a76b36118e/work"
            }
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:6babb56be2593d69d561cae7ad16b670a1ee7c0a32b4fa715007fba7febd5ddb"
            ]
        }
    }
]

docker inspect 也有常用搭配的命令,主要使用为-f 指定搜索内容,使用GO模板docker inspect --format使用

# 获取容器的启动命令
[root@123 ~]# docker inspect docker.io/ubuntu:18.04 -f {{.ContainerConfig.Cmd}}
[/bin/sh -c #(nop)  CMD ["bash"]]

注:过滤时,过滤属性规则, 一级属性{{.属性}} 二级属性 {{.属性.属性}} 三级属性 {{.属性.属性.属性}}

2.2.4 查看镜像构建历史

命令: docker history
作用:用来查询镜像的构建历史
案例: 在基础镜像中添加文件后,设置启动命令

[root@123 ~]# docker history docker.io/ubuntu:18.04
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
54919e10a95d        10 days ago         /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           10 days ago         /bin/sh -c #(nop) ADD file:425a053fd043786...   63.1 MB   

常用搭配命令
--no-trunc ,构建历史显示信息被截取时使用,用于显示完整信息

[root@123 ~]# docker history docker.io/ubuntu:18.04 --no-trunc
IMAGE                                                                     CREATED             CREATED BY                                                                                          SIZE                COMMENT
sha256:54919e10a95d6f756f7286dc0fa6b3e25b637a7f90e361504b0b14ab6762a547   10 days ago         /bin/sh -c #(nop)  CMD ["bash"]                                                                     0 B                 
<missing>                                                                 10 days ago         /bin/sh -c #(nop) ADD file:425a053fd043786e9454fb269d4c93c624550fb913a8c96d03ddd430b4e6c1c3 in /    63.1 MB  

2.2.5 搜索镜像

命令:docker search
作用: 用于在dockerHub中搜索镜像

[root@123 ~]# docker search java
INDEX       NAME                                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/node                                     Node.js is a JavaScript-based platform for...   10506     [OK]       
docker.io   docker.io/tomcat                                   Apache Tomcat is an open source implementa...   3118      [OK]       
docker.io   docker.io/openjdk                                  OpenJDK is an open-source implementation o...   2904      [OK]       
docker.io   docker.io/java                                     DEPRECATED; use "openjdk" (or other JDK im...   1976      [OK]       

常用搭配:
-f 过滤输出内容
--format 格式化输出内容
--limit 限制输出条数
--no-trunc 不截断输出结果

[root@123 ~]# docker search -f is-official=true java
INDEX       NAME                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/node      Node.js is a JavaScript-based platform for...   10506     [OK]       
docker.io   docker.io/tomcat    Apache Tomcat is an open source implementa...   3118      [OK]       

[root@123 ~]# docker search --limit 1 java
INDEX       NAME             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/java   DEPRECATED; use "openjdk" (or other JDK im...   1976      [OK]  

2.3 删除和清理镜像

2.3.1 删除镜像

主要命令:docker rmi ImageName:Tag 或 docker rmi ImageID
作用: 删除镜像
注意:

  1. 使用标签清理(docker rmi ImageName:Tag ),清理指定标签的镜像,如一个镜像有多个标签,只清理指定标签(不同标签的相同镜像拥有相同镜像ID)。
  2. 使用镜像id清理(docker rmi ImageID),如果一个id有多个标签对应会报错,如果只有一个镜像,那会删除该镜像的所有文件层
  3. 如果删除容器时报错,被其他容器引用,可以在清除时-f强制删除,但是不建议这么做,可能照成某些容器无法正常运行。推荐先删除容器docker rm containerId 删除容器后,在使用docker rmi imageId 删除
[root@123 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu    18.04               54919e10a95d        10 days ago         63.1 MB
docker.io/ubuntu    v1                  54919e10a95d        10 days ago         63.1 MB

#根据ID删除
[root@123 ~]# docker rmi 54919e10a95d
Error response from daemon: conflict: unable to delete 54919e10a95d (must be forced) - image is referenced in multiple repositories

#根据标签删除
[root@123 ~]# docker rmi docker.io/ubuntu:v1
Untagged: docker.io/ubuntu:v1

2.3.2清除镜像

命令: docker image prune
作用:清理临时镜像文件;在docker使用一段时间后,会遗留一些临时及无用的镜像文件,用此命令来清理

docker image prune -f
...
Total reclaimed space: 1.4 GB

常用搭配:
-f 强制删除
-filter 清除指定过滤字段的镜像
-a 清除所有无用镜像,不止临时镜像文件

2.4 创建镜像

创建镜像主要有以下三种

  • 通过已有镜像容器创建
  • 基于本地模板导入
  • 通过Dockerfile创建

2.4.1 基于已有容器创建

命令:docker [container] commit [OPTIONS] CONTAINER [ :TAG]]
作用:将已有容器修改后打成镜像

#启动镜像并修改
docker run -it docker.io/ubuntu:18.04 /bin/bash
root@77ebc212accd:/# touch abc.txt
root@77ebc212accd:/# exit

#将容器打包成镜像
[root@123 ~]# docker commit -m "add a new file" -a "xiaobai" -c "LABEL com.test.status='Debug'" 77ebc212accd test:v1
sha256:ce0f5fb5101c6ca02269a35d699be6c9cb769ab915addc3e117bdf6b09ac5fc4

#查看镜像
[root@123 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
test                v1                  ce0f5fb5101c        About a minute ago   63.1 MB

常用搭配:
-a 作者信息
-m 提交信息
-c 提交的时候执行 Dockerfile指令, 包括 CMDIENTRYPOINT 但 NVIEXPOSEILABELIONBUILDIUSERIVOLUMEIWORKDIR等;
-p 暂停时停止容器运行

#查看构建历史,有最新的commiut信息
[root@123 ~]# docker history ce0f5fb5101c
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
ce0f5fb5101c        52 minutes ago      /bin/bash                                       14 B                add a new file
54919e10a95d        10 days ago         /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           10 days ago         /bin/sh -c #(nop) ADD file:425a053fd043786...   63.1 MB    
#查看镜像构构建时的标签信息
[root@123 ~]# docker inspect 75756247ad --format {{.Config.Labels}}
map[com.test.status:Debug]

2.4.2 基于本地模板导入

命令:docker import file|URL ImageName:Tag
作用:通过压缩包或者url导入镜像,但是不常用,推荐下一节,将镜像使用打包成压缩包后导入

2.4.3 使用Dockerfile创建

Dockerfile是一个文件,用于给定指定指令描述,依赖某个父镜像构建新镜像的过程
命令:docker built -t ImageName:Tag .
作用:Dockerfile是一个文件,用于给定指定指令描述,依赖某个父镜像构建新镜像的过程。

Dockerfile如下

FROM busybox:latest
LABEL tester docker_user<docker_user@email.com>
RUN echo 'hello docker'

构建容器

[root@123 tmp]# docker build -t test:v1 .
Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM busybox:latest
Trying to pull repository docker.io/library/busybox ... 
latest: Pulling from docker.io/library/busybox
8ec32b265e94: Pull complete 
Digest: sha256:b37dd066f59a4961024cf4bed74cae5e68ac26b48807292bd12198afa3ecb778
Status: Downloaded newer image for docker.io/busybox:latest
 ---> 42b97d3c2ae9
Step 2/3 : LABEL tester docker_user<docker_user@email.com>
 ---> Running in 9c86cf0ee338
 ---> 64991fc5e84d
Removing intermediate container 9c86cf0ee338
Step 3/3 : RUN echo 'hello docker'
 ---> Running in 84d7221c2e19

hello docker
 ---> e39679e7fcf3
Removing intermediate container 84d7221c2e19
Successfully built e39679e7fcf3
[root@123 tmp]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                v1                  e39679e7fcf3        9 seconds ago       1.24 MB

2.5 存入存出镜像

存出镜像

命令: docker save
作用: 将docker 镜像存成压缩包等文件方便携带转出
搭配命令
-o 后跟导出到的文件(压缩文件)

[root@123 tmp]# docker save -o testImage.tgz test:v1
[root@123tmp]# ll
total 1440
-rw-r--r-- 1 root root      92 Sep 10 21:52 Dockerfile
-rw------- 1 root root 1469440 Sep 13 14:42 testImage.tgz

注意:这里save时最好使用imageName:Tag的方式,不要使用imageId,否则可能在后续load时,导入的镜像为悬挂镜像(没有镜像名称和tag)

存入镜像

命令: docker load
作用:将镜像文件导入到当前节点
搭配命令:(以下两种方式等价)
-i 后跟要导入的文件
‘<’ 后跟要导入的文件

[root@123 tmp]# docker rmi test:v1
Untagged: test:v1
Deleted: sha256:e39679e7fcf3cd653c84c5b6eacae6bd1578a847913385ce93d4f5f6856ed5ba
Deleted: sha256:196baca85ce01bc33c56be5f99b08ca3237ee38c265982e38d489a72fe888680
Deleted: sha256:64991fc5e84dcb89f439b067544fa2e407dfa57af721ed9b628cc41d72a7ca16
[root@123d tmp]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@123 tmp]# docker load -i testImage.tgz 
52de0ef6d6b2: Loading layer 2.048 kB/2.048 kB
Loaded image: test:v1
[root@123 tmp]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test                v1                  e39679e7fcf3        10 minutes ago      1.24 MB

注释: 使用docker exportdocker import 也可以完成镜像的存入存出,两者有些许差异,这里不做介绍

2.6 镜像上传

命令:docker tagdocker push

$ docker tag test:v1 user/test :latest
$ docker push user/test:latest
The push refers to a repository [docker.io/user/test] Sending image l i s t
Please login prior to push: Username :
Password:
Email :

注释:使用docker tag可以同时修改镜像名称和镜像tag

 类似资料: