Docker常用命令 search pull push images rmi build export import save load run create kill rm ps inspect top logs stats info cp exec

Docker常用命令 search pull push images rmi build export import save load run create kill rm ps inspect top logs stats info cp exec

Docker常用命令

镜像仓库操作

search搜索镜像

从镜像仓库中搜索镜像docker search options key options   --limit n    返回结果的数量   --no-trunc    显示完整的镜像描述   -f(--filter) <过滤条件>   返回符合过滤条件的镜像 key 搜索的关键字

# 搜索镜像
docker search nginx
# 只返回10条符合条件的镜像
docker search --limit 10 nginx
# 不截断输出
docker search --no-trunc nginx
# 过滤搜索结果
docker search -f starts=20 nginx
pull拉取镜像

从镜像仓库中拉取镜像docker pull options image:tag options   -a(--all-tags)  下载镜像的所有标签   -q(--quiet)    静默下载只输出镜像ID   --platform    下载指定平台镜像(linux/amd64,linux/arm64) image 镜像名称 tag 镜像版本,默认为 latest

# 拉取最新版本镜像
docker pull nginx
# 拉取指定版本镜像
docker pull nginx:alpine
# 静默拉取最新版本镜像
docker pull -q nginx
# 拉取指定平台最新版本镜像
docker pull --platform=linux/amd64 nginx
push推送镜像

将本地镜像推送到镜像仓库docker push options name:tag options   --disable-content-trust    忽略镜像的校验,默认开启 name 镜像名称,例如 docker.io/myrepo/nginx tag 镜像版本,默认为 latest

# 将latest镜像推送到默认镜像仓库
docker push myrepo/nginx
# 将v1镜像推送到默认镜像仓库
docker push myrepo/nginx:v1
# 将latest镜像推送到指定镜像仓库
docker push docker.io/myrepo/nginx

本地镜像管理

images列出镜像

列出镜像docker images options options   -a(--all)    显示所有镜像   -q(--quiet)    只显示镜像ID   -f(--filter)    根据条件过滤显示输出   --no-trunc 不截断输出   --format 格式化输出

# 显示所有本地镜像
docker images
# 显示所有镜像(包括中间层镜像)
docker images -a
# 使用过滤条件列出镜像
docker images -f "dangling=true"
# 只显示镜像ID
docker images --quiet
# 自定义格式输出
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}"
rmi删除镜像

删除一个或多个镜像docker rmi options image image... image 镜像的ID或名称 options   -a(--all-tags)   删除该仓库下的所有镜像   -f(--force)    强制删除镜像   -q(--quiet)   安静模式减少输出   --no-prune   不删除悬空的父镜像

# 删除单个镜像
docker rmi nginx
# 删除多个镜像
docker rmi nginx mysql
# 删除所有标签的镜像
docker rmi -a nginx
# 强制删除镜像
docker rmi -f nginx
# 删除悬空镜像
docker rmi $(docker images | grep "none" | awk '{print $3}')
docker images | awk '{if($2=="<none>") print $3}' |xargs docker rmi
build构建镜像

构建镜像docker build options path|url|- path Dockerfile的目录路径 url 包含Dockerfile的远程地址 - 从标准输入读取Dockerfile options   -t(--tag)    为构建的镜像指定名称和标签   -f(--file)    指定 Dockerfile 的路径   --build-arg 设置构建参数   --no-cache 不使用缓存层构建镜像   --rm 构建成功后删除中间容器   --force-rm 无论构建成功与否,一律删除中间容器   --pull 始终尝试从注册表拉取最新的基础镜像

# 构建镜像
docker build -t mynginx:latest .
# 指定Dockerfile目录构建镜像
docker build -f /path/Dockerfile -t mynginx:latest .
# 设置构建参数
docker build --build-arg HTTP_PROXY=http://proxy.x.com -t mynginx:latest .
# 不使用缓存层构建镜像
docker build --no-cache -t myimage:latest .
export导出容器

将容器文件系统导出为tar归档文件(只包含容器的文件系统)docker export options container options   -o(--output)    将输出保存到指定文件

# 将容器的文件系统导出到标准输出
docker export nginx
# 导出容器文件系统到指定文件
docker export nginx > nginx.tar
# 导出容器文件系统到指定文件
docker export -o nginx.tar nginx
import导出容器

将容器文件系统导出为tar归档文件docker import options file|URL|- repository:tag file|URL|- 输入文件的路径、本地文件或 URL,或者使用 - 从标准输入读取 options   -c(--change)    在导入过程中应用 Dockerfile 指令   -m(--message)    为导入的镜像添加注释

# 从本地tar文件导入镜像
docker import nginx.tar mynginx:latest
# 从URL导入镜像
docker import https://xx.com/nginx.tar > nginx.tar
# 从标准输入导入镜像
cat nginx.tar | docker import - mynginx:latest
# 在导入过程中应用变更
docker import -c "ENV LANG=en_US.UTF-8" -c "CMD /bin/bash" nginx.tar mynginx:latest
save保存镜像

保存一个或多个镜像为tar归档文件(包含镜像的所有层)docker save options image image... options   -o(--output)    指定输出文件的路径

# 保存单个镜像
docker save -o nginx.tar nginx:latest
# 保存多个镜像
docker save -o mult_images.tar nginx:latest mysql:latest
load加载镜像

load从 save命令生成的tar文件 中加载镜像docker load options options   -i(--input)    指定输入文件的路径   -q(--quiet)    安静模式减少输出

# 从文件加载镜像
docker load -i nginx.tar
# 从标准输入加载镜像
cat nginx.tar | docker load

容器生命周期管理

run运行容器

根据镜像创建并启动容器docker run options image [command]arg... options   --name    指定名称   -it    交互式运行容器,分配一个伪终端   -p(--publish)    端口映射(host_port:container_port)   -v(--volume)    挂载卷(host_dir:container_dir)   -e(--env)    设置环境变量   -u(--user)    指定用户   -m(--memory)   内存限制   --memory-swap   限制内存加交换内存   --rm    容器退出时自动移除   --restart    设置容器的重启策略(no/no-failure/always/unless-stopped)   --network    指定容器的网络模式   --detach    在后台创建容器   --privileged    授予此容器扩展权限

# 拉取镜像并启动一个容器
docker run nginx
# 后台运行容器
docker run -d nginx
# 交互式运行并分配终端
docker run -it nginx
# 指定容器名称
docker run --name my_name nginx
# 启动容器并进行多项配置
docker run --name my_name \
  -p 8080:80 \
  -e env_var=val \
  -v /data:/app \
  -u user1 \
  -m 1G \
  --network host \
  --restart always \
  nginx
create创建容器

同 run运行容器

start/stop/restart启动/停止/重启容器

启动/停止/重启容器docker start/stop/restart container container 可以为容器的ID或名称

# 启动容器
docker start nginx
# 启动多个容器
docker start nginx mysql
# 停止容器
docker stop nginx
# 等等20秒后停止容器
docker stop -t 20 nginx
# 停止多个容器
docker stop nginx mysql
# 重启容器
docker restart nginx
# 等等20秒后重启容器
docker restart -t 20 nginx
# 重启多个容器
docker restart nginx mysql
kill终止容器

立即终止一个或多个容器docker kill container

# 立即终止容器
docker kill nginx
# 立即终止多个容器
docker kill nginx mysql
# 通过信号终止容器
docker kill -s SIGTERM nginx
rm删除容器

删除一个或多个已停止的容器docker rm container container 可以为容器的ID或名称

# 删除单个已停止的容器
docker rm nginx
# 删除多个已停止的容器
docker rm nginx mysql
# 强制删除运行的容器
docker rm -f nginx
# 删除所有已停止的容器
docker rm $(docker ps -qf status=exited)
docker ps -qf status=exited | xargs docker rm
pause/unpause暂停/恢复容器

暂停/恢复容器docker pause/unpause container container 可以为容器的ID或名称

# 暂停容器,容器将被挂起不会被终止
docker pause nginx
# 恢复暂停的容器
docker unpause nginx

容器操作

ps列出容器

列出容器docker ps options options   -a(--all)    显示所有容器   -q(--quiet)    只显示容器ID   -l(--latest)    显示最近创建的一个容器   -f(--filter)    根据条件过滤显示的容器   -s(--size)    显示容器的大小   -n 显示最近创建的n个容器   --no-trunc 不截断输出   --format 格式化输出 容器的状态:created/restarting/running/removing/paused/exited/dead

# 显示所有运行中的容器
docker ps
# 显示容器的大小
docker ps -s
# 显示最近创建所有状态的一个容器
docker ps -l
# 显示最近创建所有状态的5个容器
docker ps -n 5
# 显示所有状态的容器
docker ps -a
# 显示状态为exited的容器
docker ps -f "status=exited"
# 显示名称包含title的容器
docker ps -f "name=title"
# 以表格的形式格式化输出
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
inspect获取详细信息

获取容器/镜像/卷/网络的详细信息docker inspect image/container/volume/network 操作对象为ID或名称

# 获取镜像的详细信息
docker inspect image
# 获取容器的详细信息
docker inspect container
# 格式化输出容器详细信息
docker inspect --format '{{ .State.Running }}' container
top显示容器中运行的进程

显示指定容器中运行的进程docker top container

# 显示nginx中运行的进程
docker top nginx
logs查看容器中的日志

查看容器中的日志docker logs options container options   -n(--tail)    从日志末尾开始显示的行数   -t(--timestamps)    显示时间戳   -f(--follow)    跟随日志输出   --details    显示提供给日志的额外详细信息   --since    显示某个时间之后的日志

# 显示容器中的所有
docker logs nginx
# 显示容器中最后20行日志
docker logs -n 20 nginx
# 显示容器中所有日志并跟随日志输出
docker logs -f nginx
# 显示容器中最后20行日志并跟随日志输出
docker logs -f -n 20 nginx
# 显示容器中自设置的时间后的日志
docker logs --since="2024-09-22T15:00:00" nginx
stats查看容器资源使用

查看容器资源使用情况docker stats options container options   -a(--all)    显示所有的容器   --no-stream    只展示当前状态,不实时更新   --no-trunc    不截断输出   --format    指定返回值的模板文件

# 显示所有运行的容器的资源使用情况
docker stats
# 显示所有的容器的资源使用情况
docker stats -a
# 显示所有运行的容器当前资源使用情况,不实时更新
docker stats --no-stream
# 使用自定义格式输出
docker stats --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
info详细信息

显示docker系统的详细信息

docker info
cp文件复制

用于容器和宿主机之间复制文件或目录docker cp options src container:targetdocker cp options container:src target container 容器的ID或名称

# 从宿主机复制文件 到 容器
docker cp /root/file.txt nginx:/path/file.txt
# 从宿主机复制目录 到 容器
docker cp /root/dir nginx:/path/dir
# 从容器复制文件 到 宿主机
docker cp nginx:/path/file.txt /root/file.txt
# 从容器复制目录 到 宿主机
docker cp nginx:/dir /root/dir
exec执行命令

用于在运行的容器中执行命令docker exec options container command arg... options   -d(--detach)    在后台运行命令   -e(--env)    设置环境变量   -u(--user)    以指定用户的身份运行命令   -it    交互模式,分配一个伪终端   -w(--workdir)    指定命令的工作目录   --privileged    给这个命令额外的权限

# 在容器中运行命令
docker exec nginx ls /app
# 进入交互模式
docker exec -it nginx /bin/bash
# 在容器后台运行命令
docker exec -d nginx touch /file.txt
# 在容器中执行命令,并设置环境变量
docker exec -e env_var=val nginx env
# 在容器中以 user1 用户执行命令
docker exec -u user1 nginx whoami
# 在容器中进入到/app下执行命令
docker exec -w /app nginx pwd