常用指令
帮助指令
docker version
用于查询docker的客户端和服务器端版本。
以下是执行过程和查询到的结果:
C:\Users\yw>docker version
Client: Docker Engine - Community
Azure integration 0.1.15
Version: 19.03.12
API version: 1.40
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:43:18 2020
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.12
API version: 1.40 (minimum version 1.12)
Go version: go1.13.10
Git commit: 48a66213fe
Built: Mon Jun 22 15:49:27 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: v1.2.13
GitCommit: 7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683
docker info
显示 Docker 系统信息,包括镜像和容器数。
docker --help
用于查询docker使用帮助
镜像命令
docker images 列出主机上的镜像
语法:docker images [OPTIONS] [REPOSITORY[:TAG]]
[REPOSITORY[:TAG]] 为具体镜像名
options:
-
-a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
C:\Users\yw>docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE grafana/grafana latest 68f75fcab5a9 4 weeks ago 186MB prom/prometheus latest 7cc97b58fb0e 5 weeks ago 168MB nacos/nacos-server latest a81222848024 2 months ago 921MB tomcat latest f796d3d2c195 3 months ago 647MB
-
--digests :显示镜像的摘要信息;
C:\Users\yw>docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE grafana/grafana latest sha256:d581a6f431b53515c64 68f75fcab5a9 4 weeks ago 186MB prom/prometheus latest sha256:b899dbd1b9017b9a379 7cc97b58fb0e 5 weeks ago 168MB nacos/nacos-server latest sha256:c2f6fee129ed53381ab a81222848024 2 months ago 921MB tomcat latest sha256:1bab37d5d97bd8c74a4 f796d3d2c195 3 months ago 647MB
-
-f :显示满足条件的镜像;
-
dangling:显示标记为空的镜像,值只有true和false
C:\Users\yw>docker images -f "dangling=true" REPOSITORY TAG IMAGE ID CREATED SIZE C:\Users\yw>docker images -f "dangling=false" REPOSITORY TAG IMAGE ID CREATED SIZE grafana/grafana latest 68f75fcab5a9 4 weeks ago 186MB prom/prometheus latest 7cc97b58fb0e 5 weeks ago 168MB nacos/nacos-server latest a81222848024 2 months ago 921MB tomcat latest f796d3d2c195 3 months ago 647MB -
label:这个是根据标签进行过滤,其中lable的值,是docker在编译的时候配置的或者在Dockerfile中配置的(
label=<key>orlabel=<key>=<value>)$ docker images --filter "label=com.example.version" REPOSITORY TAG IMAGE ID CREATED SIZE match-me-1 latest eeae25ada2aa About a minute ago 188.3 MB match-me-2 latest dea752e4e117 About a minute ago 188.3 MB $ docker images --filter "label=com.example.version=1.0" REPOSITORY TAG IMAGE ID CREATED SIZE match-me latest 511136ea3c5a About a minute ago 188.3 MB -
before:这个是根据时间来进行过滤,其中before的value表示某个镜像构建时间之前的镜像列表(<image-name>[:<tag>], <image id> 或 image@digest)
C:\Users\yw>docker images -f "before=prom/prometheus" REPOSITORY TAG IMAGE ID CREATED SIZE nacos/nacos-server latest a81222848024 2 months ago 921MB tomcat latest f796d3d2c195 3 months ago 647MB -
since:跟before正好相反,表示的是在某个镜像构建之后构建的镜像
C:\Users\yw>docker images -f "before=prom/prometheus" REPOSITORY TAG IMAGE ID CREATED SIZE nacos/nacos-server latest a81222848024 2 months ago 921MB tomcat latest f796d3d2c195 3 months ago 647MB -
reference:这个是添加正则进行匹配
以下是官网给的示例,自己试验却无法匹配到
$ docker images --filter=reference='busy*:*libc' REPOSITORY TAG IMAGE ID CREATED SIZE busybox uclibc e02e811dd08f 5 weeks ago 1.09 MB busybox glibc 21c16b6787c6 5 weeks ago 4.19 MB $ docker images --filter=reference='busy*:uclibc' --filter=reference='busy*:glibc' REPOSITORY TAG IMAGE ID CREATED SIZE busybox uclibc e02e811dd08f 5 weeks ago 1.09 MB busybox glibc 21c16b6787c6 5 weeks ago 4.19 MB
-
-
--format :指定返回值的模板文件;
Placeholder Description .IDImage ID .RepositoryImage repository .TagImage tag .DigestImage digest .CreatedSinceElapsed time since the image was created .CreatedAtTime when the image was created .SizeImage disk size C:\Users\yw>docker images --format "{{.ID}}: {{.Repository}}" 68f75fcab5a9: grafana/grafana 7cc97b58fb0e: prom/prometheus a81222848024: nacos/nacos-server f796d3d2c195: tomcat C:\Users\yw>docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG 68f75fcab5a9 grafana/grafana latest 7cc97b58fb0e prom/prometheus latest a81222848024 nacos/nacos-server latest f796d3d2c195 tomcat latest -
--no-trunc :显示完整的镜像信息;(image id进行了部分裁剪)
C:\Users\yw>docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE grafana/grafana latest sha256:68f75fcab5a9372fb 4 weeks ago 186MB prom/prometheus latest sha256:7cc97b58fb0e2e893 5 weeks ago 168MB nacos/nacos-server latest sha256:a81222848024f406b 2 months ago 921MB tomcat latest sha256:f796d3d2c1954864e 3 months ago 647MB -q :只显示镜像ID。
C:\Users\yw>docker images -q
68f75fcab5a9
7cc97b58fb0e
a81222848024
f796d3d2c195
e1d7dc9731da
docker search 查找镜像
查找某个镜像(在dockerHub中)
格式:docker search [OPTIONS] 镜像名字

options:
- --no-trunc : 显示完整的镜像描述

-
-s : 列出收藏数不小于指定值的镜像。
C:\Users\yw>docker search -s 84 tomcat Flag --stars has been deprecated, use --filter=stars=3 instead NAME DESCRIPTION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source implementati… 2900 [OK] tomee Apache TomEE is an all-Apache Java EE certif… 85 [OK] -
--automated : 只列出 automated build类型的镜像;
自动化构建,就是使用Docker Hub连接一个包含Dockerfile文件的GitHub仓库或者BitBucket仓库,Docker Hub则会自动构建镜像,通过这种方式构建出来的镜像会被标记为Automated Build,也称之为授信构建(Trusted Build),这种构建方式构建出来的镜像,其他人在使用时可以自由的查看Dockerfile内容,知道该镜像是怎么来的,同时,由于构建过程是自动的,所以能够确保仓库中的镜像都是最新的。

docker pull 下载镜像
从仓库中下载镜像
格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]
可以通过以下方式来拉取镜像:
# 默认拉取最新版本
docker pull tomcat
# 根据TAG拉取指定版本
docker pull tomcat:9.0.41
# 根据DIGEST拉取指定版本
# 常使用于锁定某版本,DIGEST在pull时可以获得
docker pull tomcat:sha256:XXXXXXXX
docker rmi 删除镜像
删除一个或多个镜像
格式:docker rmi [OPTIONS] IMAGE [IMAGE...]
options:
- -f 或 --force: 强制删除,(想要删除创建了容器(或有容器在运行也可以)的镜像,此时只是删除了镜像,容器并没有删除,容器对应的镜像名变成镜像对应的DIGEST)
- --no-prune : 不删除镜像无命名的父镜像
样例:
# 删除一个
docker rmi -f image-id
# 删除多个
docker rmi -f image-name1:tag image-name2:tag
# 删除全部
docker rmi -f $(docker image -qa)
容器命令
docker run 创建容器
运行一个命令在新的容器中。镜像是属于只读的,dockers
格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
-
--name="容器新名字": 为容器指定一个名称;不指定的话,会随机一个名字
C:\Users\yw>docker run --name ywhello hello-world C:\Users\yw>docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES e64796877a41 hello-world "/hello" 5 seconds ago Exited (0) 3 seconds ago ywhello 72be7c2e1f1b hello-world "/hello" 57 seconds ago Exited (0) 55 seconds ago angry_gauss

-d: 后台运行容器,并返回容器ID,也即启动守护式容器;也就是隐藏在后台运行,docker ps 不可见,docker ps -a可见
-i:以交互模式运行容器,通常与 -t 同时使用;
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-P: 随机端口映射;
-p: 指定端口映射,有以下四种格式 ip:hostPort:containerPort ip::containerPort hostPort:containerPort containerPort
--env , -e : 设置环境变量
docker ps 列出当前容器
列出当前正在运行的容器
格式:docker ps [OPTIONS]
OPTIONS说明(常用):
- -a :列出当前所有正在运行的容器+历史上运行过的
- -l :显示最近创建的容器。
- -n:显示最近n个创建的容器。
- -q :静默模式,只显示容器编号。
- --no-trunc :不截断输出。
退出容器方式
有两种方式:
- 输入exit,退出容器,容器停止运行
- ctrl+P+Q,退出容器,容器不停止
docker start 启动容器
格式:docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start 容器id或容器名
docker restart 重启容器
格式:docker restart [OPTIONS] CONTAINER [CONTAINER...]
options:
- --time , -t : 延时重启,默认值10s
docker stop 停止容器
格式:docker stop [OPTIONS] CONTAINER [CONTAINER...]
options:
- --time , -t : 延时关闭,默认值10s
docker kill 强制停止容器
格式:docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker rm 删除已停止的容器
格式:docker rm [OPTIONS] CONTAINER [CONTAINER...]
options:
-f : 强制删除正在运行中的容器
-
-v : 删除容器关联的挂载卷
$ docker rm -v redis
一次性删除多个容器:
# 第一种
docker rm -f $(docker ps -a -q)
# 第二种
docker ps -a -q | xargs docker rm
查看容器日志
docker logs [OPTIONS] CONTAINER
options:
-t 是加入时间戳
-f 跟随最新的日志打印
--tail 数字 :从日志末尾开始显示的行数
--since : 显示自时间戳记以来的日志(例如2013-01-02T13:23:37Z)或相对记录(例如42m的42分钟)
--until : 在时间戳(例如2013-01-02T13:23:37Z)或相对(例如42m持续42分钟)之前显示日志
docker logs -f --until=2s test
docker top 查看容器内运行的进程
docker top CONTAINER [ps OPTIONS]
docker inspect 查看容器内部细节
格式:docker inspect [OPTIONS] NAME|ID [NAME|ID...]
options:
-
--format, -f : 使用给定的Go模板格式化输出
# 获取实例的IP地址 docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $INSTANCE_ID # 获取实例的MAC地址 docker inspect --format='{{range .NetworkSettings.Networks}}{{.MacAddress}}{{end}}' $INSTANCE_ID # 获取实例的日志路径 docker inspect --format='{{.LogPath}}' $INSTANCE_ID # 获取实例的image名称 docker inspect --format='{{.Config.Image}}' $INSTANCE_ID # 列出所有端口绑定 docker inspect --format='{{range $p, $conf := .NetworkSettings.Ports}} {{$p}} -> {{(index $conf 0).HostPort}} {{end}}' $INSTANCE_ID # 查找特定的端口映射 docker inspect --format='{{(index (index .NetworkSettings.Ports "8787/tcp") 0).HostPort}}' $INSTANCE_ID --type: 返回指定类型的JSON
--size , -s : 如果类型为容器,则显示文件总大小
进入正在运行的容器并以命令行交互
# exec 是在容器中打开新的终端,并且可以启动新的进程
docker exec -it 容器ID bashShell
# 重新进入 attach 直接进入容器启动命令的终端,不会启动新的进程
docker attach 容器ID
从容器内拷贝文件到主机上
docker cp 容器ID:容器内路径 目的主机路径
docker commit提交容器副本使之成为一个新的镜像
docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
容器数据卷
宿主机和容器之间的数据交互,当容器停止运行时,宿主机向数据卷中添加文件或修改文件,容器启动后依旧可以进行同步。
命令行添加
# 直接添加
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
# 带权限添加
docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名
数据卷容器
容器与容器间的数据交互。 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器 。容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。
当已有容器A启动时,运行一个容器B依赖容器A中容器卷。
docker run -it --name 容器B --volumes-from 容器A zzyy/centos
docker file
Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本.
基础知识
- 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
- 指令按照从上到下,顺序执行
-
表示注释
- 每条指令都会创建一个新的镜像层,并对镜像进行提交
保留字
- FROM:基础镜像,当前新镜像是基于哪个镜像的
- MAINTAINER:镜像维护者的姓名和邮箱地址
- RUN:容器构建时需要运行的命令
- EXPOSE:当前容器对外暴露出的端口
- WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
- ENV : 用来在构建镜像过程中设置环境变量. ENV MY_PATH /usr/mytest这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量, 比如:WORKDIR $MY_PATH
- ADD :将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
- COPY:类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置。COPY src dest 或 COPY ["src", "dest"]
- VOLUME:容器数据卷,用于数据保存和持久化工作
- CMD:指定一个容器启动时要运行的命令。Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
- ENTRYPOINT :指定一个容器启动时要运行的命令。ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
- ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发