常用指令
帮助指令
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=
orlabel=
)= $ 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@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 .ID
Image ID .Repository
Image repository .Tag
Image tag .Digest
Image digest .CreatedSince
Elapsed time since the image was created .CreatedAt
Time when the image was created .Size
Image 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被触发