栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【Docker】之常用命令

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Docker】之常用命令

目录

一、版本信息命令

查看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 info
version

查看 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。

build

使用 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

注意: 该命令导出的镜像会保存原镜像的所有历史记录,因此导出的文件会比较大。

load

导入使用 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

重点: 虽然stopkill 都是停止容器进程,但它们存在的区别如下:

stop 命令在停止容器时会有一个超时时间(默认10秒,可以通过 --time 进行设置)来给容器处理一些未处理的事情,是属于 gracefully shutdownkill 命令无法设置超时时间,它会直接发送 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,格式为 [:];-w, --workdir="":指定命令执行所在的目录;

CONTAINER 为容器名称,COMMAND [ARG...] 为容器中的命令和参数。

示例如下:

1、在容器 demo 中开启一个交互模式的终端(输入 exit 命令退出交互终端):

[user@localhost ~]$ docker exec -it demo bash
user@0d85961c2b73:/$ |

2、执行容器 demo 中的 ls -l 命令,并指定命令执行目录为 /home

docker exec -it --workdir=/home demo ls -l

ps

查看容器列表,语法格式如下:

docker ps [OPTIONS]

OPTIONS 可选参数如下:

-a, --all :显示所有的容器,包括未运行的(默认只显示正在运行的容器);-f, --filter="":根据条件过滤显示的内容;-l, --latest:显示最近创建的容器;-n, --last:列出最近创建的 n 个容器;--no-trunc:不截断输出(显示更多更详细信息);-q, --quiet:静默模式,只显示容器ID;-s, --size:显示容器占用的总的文件大小;

示例如下:

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

各列含义:

ConTAINER ID::容器 ID;IMAGE:创建容器所使用的镜像;COMMAND:启动容器时运行的命令;CREATED:容器的创建时间;STATUS:容器状态;PORTS:容器的端口信息和使用的连接类型(tcp/udp);NAMES:容器名称(如果创建容器时没有指定名称则会默认分配一个容器名);

容器过滤示例:

# 根据标签过滤
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

查看容器/镜像的元数据信息(即底层基础信息,包括:容器的ID、创建时间、运行状态、启动参数、目录挂载、网路配置等等),语法格式为:

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS 可选参数如下:

-f, --format="":使用Go语言模板格式化输出;-s, --size:如果查看的是容器则显示总的文件大小;--type="":指定 docker 对象类型(container / image),在容器与镜像名称相同时使用(比如:容器 redis 和镜像 redis:latest 名称是相同的),如果容器和镜像名称不冲突时,docker 会自动识别是镜像还是容器。

NAME|ID 可以是容器名称或ID,也可以是镜像名称;如果为容器则显示容器及其镜像信息,如果为镜像则仅仅显示镜像信息。

示例如下:

1、查看全部信息:

# 查看 redis 容器的元信息
docker inspect redis

# 查看 redis 镜像的元信息
docker inspect --type=image redis

2、查看特定的信息:

# 查看目录挂载信息(并使用 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

OPTIONS 可选参数如下:

-f, --follow:实时跟踪日志输出(ctrl + c 退出);--since="":从指定时间开始显示日志,可以是 timestamp,也可以是相对时间,如 42m即 42 分支);-n, --tail="":从日志末尾显示指定行数日志, 默认是 all;-t, --timestamps:显示时间戳;--until="":显示指定的时间之前的日志,可以是 timestamp,或相对时间,如 42m即 42 分支);

示例如下:

# 查看容器 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

将容器的文件系统导出为 tar 归档文件,语法格式为:

docker export [OPTIONS] ConTAINER

OPTIONS 可选参数如下:

-o, --output="":将内容导出到文件(文件不存在则自动创建),而不是默认的 STDOUT

CONTAINER 可以是容器名称也可以是容器ID

示例如下:

# 将容器 demo 导出到 demo.tar 文件中
docker export -o demo.tar demo

注意: export 命令导出的容器文件会丢失所有元数据和历史记录,仅保存容器当时的状态,相当于虚拟机快照,所以导出的文件会相对较小。


cp

在容器和主机之间拷贝数据,语法格式如下:

1、从容器中拷贝到主机上:

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-

2、从主机拷贝到容器中:

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

OPTIONS 可选参数如下:

-a, --archive:归档模式,会拷贝所有 uid/gid 信息;-L, --follow-link:保持源目标中的链接;

DEST_PATH|- 中的 - 表示将容器的数据输出到主机的标准输出中;SRC_PATH|- 中的 - 表示从主机的标准输入中读取数据。

示例如下:

# 拷贝容器 demo 的目录 /home/temp 拷贝到主机的 /data 目录下
docker cp demo:/home/temp /data

# 拷贝主机 /temp/data 目录拷贝到容器 demo 的 /home/temp 目录下
docker cp /home/data demo:/home/temp
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号