二、Docker镜像使用(docker常用命令)
2.1 Docker镜像拉取
命令:docker pull Name[:Tag]
,如下
docker pull ubuntu:18.04
- 此处的[:tag]为可选信息,如不填写,默认为tag为 latest ,一般latest会随着最新版本变动而变动,如对版本有明确需求,应当添加指定版本。
- 此处的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 images
或docker 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
作用: 删除镜像
注意:
- 使用标签清理(docker rmi ImageName:Tag ),清理指定标签的镜像,如一个镜像有多个标签,只清理指定标签(不同标签的相同镜像拥有相同镜像ID)。
- 使用镜像id清理(docker rmi ImageID),如果一个id有多个标签对应会报错,如果只有一个镜像,那会删除该镜像的所有文件层
- 如果删除容器时报错,被其他容器引用,可以在清除时
-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 export
与docker import
也可以完成镜像的存入存出,两者有些许差异,这里不做介绍
2.6 镜像上传
命令:docker tag
与 docker 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