一、版本信息命令
查看docker系统信息 info查看docker版本信息 version 二、本地镜像管理命令
查看镜像列表 images删除镜像 rmi打镜像标签 tag构建镜像 build保存镜像 save加载镜像 load导入镜像 import 三、镜像仓库命令
登录 / 登出仓库 login/logout查找镜像 search拉取镜像 pull推送镜像 push 四、容器管理命令
创建并运行容器 run创建容器 create容器进程管理 start/stop/restart/kill暂停 / 恢复 pause/unpause删除容器 rm运行容器中的命令 exec查看容器列表 ps查看容器元数据 inspect查看容器日志 logs导出容器 export容器与主机数据拷贝 cp
一、版本信息命令
info
查看 Docker 的系统信息,包括镜像和容器相关信息,命令如下:
docker infoversion
查看 Docker 的详细版本信息,命令如下:
docker version
注意: docker -v | --version 命令只打印版本号信息。
二、镜像相关命令
images
列出本地镜像,语法格式为:
docker images [OPTIONS] [REPOSITORY[:TAG]]
OPTIONS 选参数:
-a, --all:列出本地所有的镜像(包含中间映像层,默认情况下是过滤掉中间映像层);-f, --filter:根据给定条件进行过滤;-q:只显示镜像 ID;--digests:显示 sha256sum 信息;--help:查看命令帮助;
REPOSITORY[:TAG] 表示可以指定镜像以及镜像的 TAG 版本(同一个仓库下的镜像可以有多个版本,根据 TAG 区分),比如下面是列出仓库名称为 mysql 的所有版本镜像:
docker images mysql ------------------- REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 f07dfa83b528 10 months ago 448MB mysql 5.8 b07aga63b223 9 months ago 628MB
rmi
删除本地一个或多个镜像,语法格式为:
docker rmi [OPTIONS] [IMAGE...]
OPTIONS 可选参数有:
-f, --force:牵制删除镜像;--no-prune:不移除该镜像的中间过程镜像(默认移除); IMAGE 可以是镜像ID,也可以是 REPOSITORY[:TAG](如果不写 TAG 则默认 TAG 为 latest),删除多个时,使用空格隔开;
示例如下:
# 根据镜像ID删除 docker rmi a3562aa0b991 # 根据仓库的镜像名:版本号删除 docker rmi mysql:5.7
tag
对镜像进行标记,并创建一个指向原镜像的引用镜像,创建的镜像和原镜像属于同一个仓库。语法格式为:
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
示例如下:
[user@localhost ~] docker tag redis redis:v2 [user@localhost ~] docker images REPOSITORY TAG IMAGE ID CREATED SIZE redis latest ef47f3b6dc11 14 months ago 104MB redis v2 ef47f3b6dc11 14 months ago 104MB
可以看到两个 TAG 的镜像使用的是同一个 IMAGE ID,如果根据镜像ID删除的话会将两个版本的镜像都删除,所以想要删除某个 TAG 的镜像时,应该使用 REPOSITORY[:TAG] 的形式,比如:docker rmi redis:v2。
使用 Dockerfile 创建镜像,语法格式为:
docker build [OPTIONS] PATH | URL | -
OPTIONS 可选参数:
-build-arg=[]:设置镜像创建时的变量;-c, --cpu-shares::设置 cpu 使用权重;--disable-content-trust::忽略校验,默认开启;-f, --file:指定要使用的 Dockerfile 路径(默认为当前目录);--force-rm:构建过程中删除中间容器;--isolation:使用容器隔离技术;--label=[]:设置镜像使用的元数据;-m, --memory:设置内存最大值;--memory-swap:设置 Swap 的最大值为 [memory值+swap值],-1 表示不限 swap;--no-cache:创建镜像的过程不使用缓存;-q, --quiet:不打印构建过程输出内容,成功后只输出镜像 ID;--rm:镜像构建成功后删除中间容器;--shm-size:设置 /dev/shm 的大小,默认值是 64M;-t, --tag:设置镜像的名字及标签,通常 name:tag,如果不提供 tag 值则默认为 latest;可以在一次构建中为一个镜像设置多个标签。
PATH | URL | - 表示镜像构建过程中的上下文环境的目录,可以简单设置为 .
示例如下:
# 使用当前目录的 Dockerfile 创建镜像 docker build -t demo:v1 . # 使用指定目录下的 Dockerfile 创建镜像 docker build -f /home/docker/Dockerfile -t demo:v1 . # 使用URL github.com/creack/docker-firefox 的 Dockerfile 创建镜像 docker build github.com/creack/docker-firefox
save
将指定镜像(一个或多个)保存成 tar 归档文件,语法格式为:
docker save [OPTIONS] IMAGE [IMAGE...]
OPTIONS 可选参数为:
-o, --output:指定输出的文件(默认输出到标准输出流),
示例如下:
# 将镜像 demo:v1 导出为 demo.tar 文件 docker save -o demo.tar demo:v1
注意: 该命令导出的镜像会保存原镜像的所有历史记录,因此导出的文件会比较大。
导入使用 docker save 命令生成的镜像归档文件,语法格式为:
docker load [OPTIONS]
OPTIONS 可选参数:
-i, --input:指定导入的文件(默认为标准输入);-q, --quiet:不打印导入过程的输出信息;
示例如下:
# 从 demo.tar 中导入镜像 docker load --input ./demo.tar
import
从使用 docker export 生成的归档文件中创建镜像,语法格式为:
docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
OPTIONS 可选参数:
-c, --change:使用 Dockerfile 指令创建镜像;-m, --message:设置提交时的说明文字;
示例如下:
# 从 demo.tar 中创建镜像并命令为 demo:v1 docker import demo.tar demo:v1
三、镜像仓库命令
login/logout
登陆 / 登出 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub,语法格式如下:
# 登录 docker login [OPTIONS] [SERVER] # 登出 docker logout [SERVER]
OPTIONS 可选参数为:
-u, --username:登录的用户名;-p, --password:登录的密码;--password-stdin:从标准输入中获取密码;
示例如下:
# 登录到 Docker Hub docker login -u 用户名 -p 密码 # 登出 Docker Hub docker logout
search
从 Docker Hub 中查找镜像,语法格式如下:
docker search [OPTIONS] TERM
OPTIONS 参数说明:
-f, --filter:根据过滤条件进行镜像过滤;--no-trunc:显示完整的镜像描述;
TERM 表示要查找的镜像命令。
示例如下:
# 查找所有镜像名包含 java,并且收藏数大于 10 的镜像 docker search -f stars=10 java ------------------------------ NAME DEscriptION STARS OFFICIAL AUTOMATED tomcat Apache Tomcat is an open source im… 3273 [OK] openjdk OpenJDK is an open-source implemen… 3174 [OK] java DEPRECATED; use "openjdk" (or othe… 1976 [OK]
各列含义:
NAME:镜像仓库源的名称;DEscriptION:镜像的描述;OFFICIAL:是否 docker 官方发布,[OK] 表示是;STARS:镜像的收藏数;AUTOMATED:是否自动构建,[OK];
pull
从镜像仓库中拉取镜像,语法格式为:
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
OPTIONS 可选参数如下:
-a, --all-tags:拉取所有 tagged 镜像;--disable-content-trust:忽略镜像的校验(默认开启);
示例如下;
# 下载 java 最新镜像 docker pull java # 下载指定版本的 mysql 镜像 docker pull mysql:5.7 # 下载 REPOSITORY 为 redis 的所有镜像 docker pull -a redis
push
将本地的镜像上传到镜像仓库(要先登陆到镜像仓库),语法格式如下:
docker push [OPTIONS] NAME[:TAG]
OPTIONS 可选参数:
-a, --all-tags:推送所有 tagged 镜像;--disable-content-trust:忽略镜像的校验(默认开启);
示例如下:
# 上传本地镜像 myredis:v1 到镜像仓库 docker push myredis:v1
四、容器管理命令
run
创建并运行一个新容器,同时可以执行容器中的命令,语法格式为:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS 常用可选参数如下:
-p:指定端口映射,格式为:主机端口:容器端口;-d, --detach:后台运行容器并返回容器ID,--detach 默认为 false;-v, --volume=[]:目录挂载,格式为:主机目录:容器目录;-e, --env=[]:设置环境变量,容器中可以使用该环境变量;-m, --memory="":设置容器的内存上限;--name="":为容器指定一个名称;-i, --interactive:以交互模式运行容器,通常与 -t 同时使用;-t, --tty:为容器分配一个 tty 终端,通常与 -i 同时使用;-h, --hostname="":指定容器的主机名;--restart="":容器退出时的重启策略(默认为 no):
no:容器退出时不重启;on-failure:容器故障(返回值为非0)时重启;always:容器退出时总是重启; -l, --label=[]:设置标签元数据;--help:显示更多帮助命令;
IMAGE 为创建容器的镜像,[COMMAND] [ARG...] 表示创建容器的后执行该容器的命令。
示例如下:
1、使用镜像 demo:v1 创建容器,并命名容器为 demo,容器在后台运行,将主机的8080端口映射到容器的8080端口,挂载主机的 /data 目录到容器中的 /data 目录中:
docker run -d -p 8080:8080 -v /data:/data --name=demo demo:v1
2、使用镜像 demo:v1 创建容器,并以交互模式执行容器中的 /bin/bash 命令:
docker run -it demo:v1 /bin/bash
create
创建一个容器但不启动它,用法与 run 相同,格式如下:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
示例如下:
# 使用镜像 demo:v1 创建一个容器,并命名容器为 demo docker create --name=demo demo:v1
start/stop/restart/kill
启动、停止、重启、杀死容器,语法格式如下:
docker start/stop/restart/kill [OPTIONS] ConTAINER [CONTAINER...]
stop 和 restart 可以通过 -t, --time 指定等待多久再停止容器(默认 10 秒);kill 可以通过 -s, --signal 参数向容器发送一个信号(默认为 KILL)
重点: 虽然stop 与 kill 都是停止容器进程,但它们存在的区别如下:
stop 命令在停止容器时会有一个超时时间(默认10秒,可以通过 --time 进行设置)来给容器处理一些未处理的事情,是属于 gracefully shutdown。kill 命令无法设置超时时间,它会直接发送 SIGKILL 信号(以及用户通过 --signal 参数指定的其他信号)强制杀死 docker 进程。
pause/unpause
暂停、恢复容器中的所有进程,语法格式为:
docker pause/unpause ConTAINER [CONTAINER...]
rm
删除一个或多个容器,语法格式如下:
docker rm [OPTIONS] ConTAINER [CONTAINER...]
OPTIONS 可选参数如下:
-f, --force:通过 SIGKILL 信号强制删除一个运行中的容器;-l, --link:移除容器间的网络连接,而非容器本身;-v, --volumns:删除没有映射主机目录的匿名卷;
注意:
在创建容器进行目录映射时如果没有指定主机映射目录时,该目录就是匿名卷,目录默认存储在 /var/lib/docker/ 目录下,而 -v 在删除容器的同时只会删除匿名卷目录;只能删除已经停止运行的容器。
示例如下:
# 强制删除容器demo docker rm -f demo # 删除所有已停止的容器 docker rm $(docker ps -a -q) # 删除容器的同时删除匿名映射目录 docker rm -f -v demo
exec
执行正在运行的容器中的命令,语法格式如下:
docker exec [OPTIONS] ConTAINER COMMAND [ARG...]
OPTIONS 可选参数如下:
-d, --detach:分离模式,在后台运行命令;-e, --env=[]:设置环境变量;-i, --interactive:交互模式,保持 STDIN 打开(即使附加);-t, --tty:分配一个伪终端;-u, --user="":用户名或用户ID,格式为 CONTAINER 为容器名称,COMMAND [ARG...] 为容器中的命令和参数。 示例如下: 1、在容器 demo 中开启一个交互模式的终端(输入 exit 命令退出交互终端): 2、执行容器 demo 中的 ls -l 命令,并指定命令执行目录为 /home: 查看容器列表,语法格式如下: OPTIONS 可选参数如下: -a, --all :显示所有的容器,包括未运行的(默认只显示正在运行的容器);-f, --filter="":根据条件过滤显示的内容;-l, --latest:显示最近创建的容器;-n, --last:列出最近创建的 n 个容器;--no-trunc:不截断输出(显示更多更详细信息);-q, --quiet:静默模式,只显示容器ID;-s, --size:显示容器占用的总的文件大小;
示例如下: 各列含义: ConTAINER ID::容器 ID;IMAGE:创建容器所使用的镜像;COMMAND:启动容器时运行的命令;CREATED:容器的创建时间;STATUS:容器状态;PORTS:容器的端口信息和使用的连接类型(tcp/udp);NAMES:容器名称(如果创建容器时没有指定名称则会默认分配一个容器名);
容器过滤示例: 查看容器/镜像的元数据信息(即底层基础信息,包括:容器的ID、创建时间、运行状态、启动参数、目录挂载、网路配置等等),语法格式为: OPTIONS 可选参数如下: -f, --format="":使用Go语言模板格式化输出;-s, --size:如果查看的是容器则显示总的文件大小;--type="":指定 docker 对象类型(container / image),在容器与镜像名称相同时使用(比如:容器 redis 和镜像 redis:latest 名称是相同的),如果容器和镜像名称不冲突时,docker 会自动识别是镜像还是容器。
NAME|ID 可以是容器名称或ID,也可以是镜像名称;如果为容器则显示容器及其镜像信息,如果为镜像则仅仅显示镜像信息。 示例如下: 1、查看全部信息: 2、查看特定的信息: 获取容器的日志,语法格式为: OPTIONS 可选参数如下: -f, --follow:实时跟踪日志输出(ctrl + c 退出);--since="":从指定时间开始显示日志,可以是 timestamp,也可以是相对时间,如 42m(即 42 分支);-n, --tail="":从日志末尾显示指定行数日志, 默认是 all;-t, --timestamps:显示时间戳;--until="":显示指定的时间之前的日志,可以是 timestamp,或相对时间,如 42m(即 42 分支);
示例如下: 将容器的文件系统导出为 tar 归档文件,语法格式为: OPTIONS 可选参数如下: -o, --output="":将内容导出到文件(文件不存在则自动创建),而不是默认的 STDOUT
CONTAINER 可以是容器名称也可以是容器ID。 示例如下: 注意: export 命令导出的容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照,所以导出的文件会相对较小。 在容器和主机之间拷贝数据,语法格式如下: 1、从容器中拷贝到主机上: 2、从主机拷贝到容器中: OPTIONS 可选参数如下: -a, --archive:归档模式,会拷贝所有 uid/gid 信息;-L, --follow-link:保持源目标中的链接;
DEST_PATH|- 中的 - 表示将容器的数据输出到主机的标准输出中;SRC_PATH|- 中的 - 表示从主机的标准输入中读取数据。 示例如下:[user@localhost ~]$ docker exec -it demo bash
user@0d85961c2b73:/$ |
docker exec -it --workdir=/home demo ls -l
ps
docker ps [OPTIONS]
docker ps
---------
ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd1438c76e4e redis "docker-entrypoint.s…" 18 hours ago Up 18 hours 0.0.0.0:6379->6379/tcp redis
0d85961c2b73 demo4docker "java -Djava.securit…" 5 days ago Up 4 days 0.0.0.0:8080->8080/tcp demo
# 根据标签过滤
docker run -d --label color=blue demo
docker ps --filter "label=color"
docker ps --filter "label=color=blue"
# 根据名称过滤
docker ps -f name=demo
# 根据镜像过滤
docker ps -f ancestor=redis
inspect
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
# 查看 redis 容器的元信息
docker inspect redis
# 查看 redis 镜像的元信息
docker inspect --type=image redis
# 查看目录挂载信息(并使用 python 的 json 模块格式化输出)
docker inspect --format="{{json .Mounts}}" ConTAINER | python -m json.tool
#查看完整网络信息(并使用 jq 命令进行美化 json 输出)
docker inspect --format="{{json .NetworkSettings}}" ConTAINER | jq
#查看网络端口映射
docker inspect --format="{{json .NetworkSettings.Ports}}" ConTAINER | jq
# 查看容器的网络ip
docker inspect --format="{{json .NetworkSettings.Networks}}" ConTAINER | jq
logs
docker logs [OPTIONS] ConTAINER
# 查看容器 redis 从 2022-02-10T13:20:30 开始的最后100行日志,并实时跟踪日志输出
docker logs -f --since="2022-02-10T13:20:30" --tail=100 redis
# 查看容器 redis 最近 30 分钟的日志
docker logs --since 30m redis
# 查看容器 redis 某个时间段的日志
docker logs --since="2022-02-10T13:20:30" --until="2022-03-10" redis
export
docker export [OPTIONS] ConTAINER
# 将容器 demo 导出到 demo.tar 文件中
docker export -o demo.tar demo
cp
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
# 拷贝容器 demo 的目录 /home/temp 拷贝到主机的 /data 目录下
docker cp demo:/home/temp /data
# 拷贝主机 /temp/data 目录拷贝到容器 demo 的 /home/temp 目录下
docker cp /home/data demo:/home/temp



