docker常用命令

Docker 常用操作

Docker 作为现代应用开发和部署的利器,已经成为开发者和运维人员的必备技能。无论你是刚刚接触 Docker 的新手,还是有一定经验的用户,掌握以下几个核心操作都能显著提升你的工作效率。本文将详细介绍 Docker 的常用操作,包括镜像管理、容器操作等实用技巧。

一、Docker 镜像管理

1. 拷贝 Docker 镜像

在实际工作中,我们经常需要在不同环境之间迁移 Docker 镜像。以下是几种常见的方法:

方法一:使用 docker savedocker load(推荐)

这是最常用的镜像迁移方法,适合离线环境或网络受限的场景。

bash 复制代码
# 将镜像保存为tar文件
docker save -o myimage.tar nginx:latest

# 将tar文件拷贝到目标机器(可以使用scp、rsync等工具)
scp myimage.tar user@remote-server:/path/to/

# 在目标机器上加载镜像
docker load -i myimage.tar

# 验证镜像是否加载成功
docker images | grep nginx
方法二:使用 docker exportdocker import

这种方法适用于容器运行时状态的迁移,但不推荐用于镜像分发(会丢失元数据)。

bash 复制代码
# 导出容器为tar文件
docker export container_id > mycontainer.tar

# 导入为镜像
docker import mycontainer.tar my-custom-image:tag
方法三:使用 Docker Hub 等镜像仓库

对于可以访问公网的环境,使用镜像仓库是最方便的方式。

bash 复制代码
# 1. 登录 Docker Hub
docker login

# 2. 给镜像打标签(格式:username/repository:tag)
docker tag nginx:latest yourusername/nginx-custom:1.0

# 3. 推送到远程仓库
docker push yourusername/nginx-custom:1.0

# 4. 在目标机器上拉取镜像
docker pull yourusername/nginx-custom:1.0
方法四:使用 docker commit(从容器创建镜像)
bash 复制代码
# 基于运行的容器创建新镜像
docker commit [容器ID] [新镜像名]:[标签]

# 示例:将运行的nginx容器保存为镜像
docker commit abc123 my-nginx:v1.0

# 验证新镜像
docker images my-nginx

2. 删除 Docker 镜像

随着使用时间的增长,系统中会积累很多不再需要的镜像,及时清理可以节省磁盘空间。

基本删除操作
bash 复制代码
# 删除单个镜像(通过镜像ID)
docker rmi image_id

# 删除单个镜像(通过镜像名:标签)
docker rmi nginx:latest

# 强制删除(即使有容器正在使用)
docker rmi -f image_id
批量删除操作
bash 复制代码
# 删除所有未被使用的镜像(悬空镜像)
docker image prune

# 强制删除所有未被使用的镜像(不提示确认)
docker image prune -f

# 删除所有未被容器使用的镜像(包括有标签但未被使用的)
docker image prune -a

# 按条件删除镜像
docker images | grep "none" | awk '{print $3}' | xargs docker rmi

# 删除指定仓库的所有镜像
docker images | grep "my-repo" | awk '{print $1":"$2}' | xargs docker rmi
删除所有镜像(谨慎使用!)
bash 复制代码
# 删除所有镜像(包括正在被容器使用的)
docker rmi -f $(docker images -q)

# 或者分步进行
docker stop $(docker ps -aq)      # 停止所有容器
docker rm $(docker ps -aq)        # 删除所有容器
docker rmi $(docker images -q)    # 删除所有镜像

二、Docker 容器操作

3. 查看运行的 Docker 容器

了解如何查看和管理正在运行的容器是 Docker 日常操作的基础。

查看容器状态
bash 复制代码
# 查看正在运行的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看最近创建的容器
docker ps -l

# 查看最后n个创建的容器
docker ps -n 3

# 仅显示容器ID
docker ps -q

# 显示完整信息(包括命令、端口映射等)
docker ps --no-trunc

# 格式化输出(自定义显示列)
docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"
查看容器详细信息
bash 复制代码
# 查看容器的详细信息(JSON格式)
docker inspect container_id

# 查看特定信息(如IP地址)
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_id

# 查看容器端口映射
docker port container_id

# 查看容器日志
docker logs container_id

# 实时查看容器日志(类似tail -f)
docker logs -f container_id

# 查看容器资源使用情况
docker stats container_id

# 查看所有容器的资源使用情况
docker stats --all
实用组合命令
bash 复制代码
# 显示所有容器的简洁信息
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Names}}\t{{.Status}}"

# 显示所有容器及其IP地址
docker ps -q | xargs docker inspect --format='{{.Id}} - {{.Name}} - {{.NetworkSettings.IPAddress}}'

# 清理所有已停止的容器
docker container prune

4. 进入 Docker 容器

进入容器内部进行操作是调试和排查问题的常用手段。

方法一:使用 docker exec(推荐)

docker exec 可以在运行的容器中执行命令,是最常用的进入容器的方式。

bash 复制代码
# 在容器中执行单条命令
docker exec container_id ls -la /app

# 进入容器的交互式bash终端
docker exec -it container_id /bin/bash

# 进入容器的sh终端(如果bash不存在)
docker exec -it container_id /bin/sh

# 以特定用户身份进入容器
docker exec -it -u root container_id /bin/bash

# 指定工作目录
docker exec -it -w /app container_id /bin/bash

# 设置环境变量
docker exec -it -e MY_VAR=value container_id /bin/bash
方法二:使用 docker attach

docker attach 可以连接到正在运行的容器的标准输入/输出,但不推荐用于日常操作。

bash 复制代码
# 连接到容器的标准输入/输出
docker attach container_id

# 退出attach模式(注意:直接退出可能会停止容器)
# 使用快捷键:Ctrl+P, Ctrl+Q 可以退出而不停止容器

重要区别:

  • docker exec:创建新的进程进入容器,退出时不会影响原有进程
  • docker attach:连接到现有进程,退出时可能会停止容器
方法三:使用 docker run 直接进入

在创建容器时就进入交互模式:

bash 复制代码
# 创建并立即进入容器
docker run -it --name mycontainer ubuntu:latest /bin/bash

# 创建后台容器,然后进入
docker run -d --name mycontainer ubuntu:latest tail -f /dev/null
docker exec -it mycontainer /bin/bash
实用技巧和注意事项
bash 复制代码
# 1. 如果容器中没有bash/sh,可以安装
docker exec container_id apt-get update && apt-get install -y bash

# 2. 临时文件操作
# 从宿主机拷贝文件到容器
docker cp local_file.txt container_id:/path/in/container/

# 从容器拷贝文件到宿主机
docker cp container_id:/path/in/container/file.txt ./local_copy.txt

# 3. 查看容器中的进程
docker top container_id

# 4. 在容器和宿主机之间同步时间
docker exec container_id date
docker exec container_id ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

# 5. 调试容器网络
docker exec container_id ping google.com
docker exec container_id curl http://localhost:80
容器内常用操作示例
bash 复制代码
# 进入MySQL容器
docker exec -it mysql_container mysql -u root -p

# 进入Redis容器
docker exec -it redis_container redis-cli

# 进入Nginx容器查看配置文件
docker exec -it nginx_container cat /etc/nginx/nginx.conf

# 在容器中安装工具(用于调试)
docker exec container_id apt-get update
docker exec container_id apt-get install -y curl net-tools vim

# 查看容器环境变量
docker exec container_id env

三、Docker 日常维护小贴士

磁盘空间管理

bash 复制代码
# 查看Docker磁盘使用情况
docker system df

# 详细查看各组件磁盘使用
docker system df -v

# 清理所有无用数据
docker system prune -a

# 清理指定时间前的数据
docker image prune --filter "until=24h"

容器生命周期管理

bash 复制代码
# 启动/停止/重启容器
docker start container_id
docker stop container_id
docker restart container_id

# 暂停/恢复容器
docker pause container_id
docker unpause container_id

# 重命名容器
docker rename old_name new_name

# 更新容器配置(需要重新创建)
docker update --memory=512m container_id

网络管理

bash 复制代码
# 查看网络列表
docker network ls

# 查看网络详情
docker network inspect network_name

# 连接/断开容器网络
docker network connect network_name container_id
docker network disconnect network_name container_id

实用命令速查表

操作 命令 说明
镜像拷贝 docker save -o image.tar image:tag 保存镜像为文件
docker load -i image.tar 从文件加载镜像
镜像删除 docker rmi image_id 删除指定镜像
docker image prune 清理悬空镜像
查看容器 docker ps 查看运行中的容器
docker ps -a 查看所有容器
进入容器 docker exec -it container_id /bin/bash 进入容器终端
docker attach container_id 连接到容器进程
容器操作 docker start/stop/restart 启停容器
docker logs container_id 查看容器日志
系统维护 docker system df 查看磁盘使用
docker system prune 清理无用数据

最佳实践建议

  1. 命名规范

    • 使用有意义的镜像标签(如 app:v1.2.3
    • 为容器指定名称(--name参数)
    • 使用标签(label)组织镜像和容器
  2. 数据持久化

    • 重要数据使用volume或bind mount
    • 避免在容器内存储重要数据
  3. 资源限制

    • 为容器设置内存和CPU限制
    • 监控容器资源使用情况
  4. 安全性

    • 使用非root用户运行容器
    • 定期更新基础镜像
    • 扫描镜像中的安全漏洞

总结

掌握这些 Docker 常用操作后,你将能够更加自如地管理容器化应用。记住,实践是最好的学习方式------多动手操作,遇到问题查阅官方文档,你会很快成为 Docker 使用高手。Docker 的世界还有很多高级功能等待探索,但这些基础操作已经能够覆盖 80% 的日常使用场景。

小提示: 使用命令别名可以大幅提高效率,例如在 ~/.bashrc 中添加:

bash 复制代码
alias dps='docker ps --format "table {{.ID}}\t{{.Names}}\t{{.Status}}\t{{.Ports}}"'
alias dimg='docker images'
alias dlog='docker logs -f'
相关推荐
胖好白1 天前
【咸鱼RK3399】打造NAS(Debian+Docker+CasaOS)
linux·docker·debian
开开心心就好1 天前
右键菜单管理工具,添加程序自定义名称位置
linux·运维·服务器·ci/cd·docker·pdf·1024程序员节
Red丶哞1 天前
Docker 部署 File Browser 文件管理系统
运维·docker·容器
Red丶哞1 天前
使用Docker部署RustFS分布式对象存储服务
linux·docker·云原生
l1t1 天前
使用docker安装sql server linux版
linux·sql·docker·容器·sqlserver
Devlive 开源社区1 天前
技术日报|隐私笔记平台memos登顶日增661星,Docker安卓模拟器持续火热
android·笔记·docker
java_logo1 天前
2026 年 1 月最新 Docker 镜像源加速列表与使用指南
docker·容器·docker镜像·docker镜像源·docker镜像加速·docker镜像下载·docker国内加速
叽里咕噜怪1 天前
docker与微服务的课程-CICD
docker·微服务·容器
学好statistics和DS1 天前
Docker, virtual machine, WSL, Ubuntu
ubuntu·docker·容器