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