Docker常用命令操作详解
·
1.核心概念
-
镜像: 一个只读的模板,类似于虚拟机的快照。例如
ubuntu:22.04,nginx,python:3.9-slim。 -
容器: 镜像的运行实例。你可以创建、启动、停止、移动或删除容器。它是轻量级和可移植的。
2.命名格式
docker [command] [sub-command] [options] [arguments]
3.容器生命周期管理
3.1.docker run 创建并启动一个新容器
这是最常用的命令,它会从一个镜像创建一个新的容器并启动它
# 最基本用法:启动一个容器,运行一次然后退出
docker run ubuntu:22.04 /bin/echo 'Hello World'
# 启动一个交互式容器并进入命令行 (--interactive, --tty)
docker run -it ubuntu:22.04 /bin/bash
# 启动容器并在后台运行 (--detach)
docker run -d --name my_nginx nginx
# 映射端口 (主机端口:容器端口)
docker run -d -p 8080:80 --name web nginx
# 访问:http://localhost:8080
# 映射数据卷 (主机目录:容器目录)
docker run -v /host/path:/container/path -it ubuntu bash
# 设置环境变量
docker run -e "MY_VAR=my_value" -e "ENV=production" my-image
# 传递所有环境变量从主机到容器
docker run --env-file .env my-image
# 综合示例:启动一个后台运行的MySQL容器,设置root密码,并创建数据卷
docker run -d \
--name mysql_db \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret-pw \
-v mysql_data:/var/lib/mysql \
mysql:8.0
3.2.docker start/stop/restart - 启动/停止/重启容器
# 启动一个已停止的容器
docker start <container_name_or_id>
# 停止一个运行中的容器(发送 SIGTERM,等待优雅关闭)
docker stop <container_name_or_id>
# 强制立即停止一个容器(发送 SIGKILL)
docker kill <container_name_or_id>
# 重启容器
docker restart <container_name_or_id>
3.3.docker rm - 删除容器
# 删除一个已停止的容器
docker rm <container_name_or_id>
# 强制删除一个容器(即使正在运行)
docker rm -f <container_name_or_id>
# 删除所有已停止的容器(非常实用!)
docker container prune
# 或者
docker rm $(docker ps -aq)
4.容器信息查询
4.1.docker ps 列出容器
# 查看正在运行的容器
docker ps
# 查看所有容器(包括已停止的)
docker ps -a
# 查看最新创建的容器(包括已停止的)
docker ps -l
# 显示容器大小(增加磁盘使用信息)
docker ps -s
# 格式化输出(只显示ID和镜像名)
docker ps --format "table {{.ID}}\t{{.Image}}"
4.2.docker logs 查看容器日志
# 查看容器的日志
docker logs <container_name_or_id>
# 实时查看日志流(类似 tail -f)
docker logs -f <container_name_or_id>
# 查看最后N行日志
docker logs --tail 100 <container_name_or_id>
# 查看带时间戳的日志
docker logs -t <container_name_or_id>
# 查看自某个时间点后的日志
docker logs --since 2023-01-01T00:00:00 <container_name_or_id>
4.3.docker inspect - 查看容器详细信息
# 查看容器的所有详细信息
docker inspect <container_name_or_id>
# 只查看容器的IP地址
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>
# 只查看容器的状态
docker inspect -f '{{.State.Status}}' <container_name_or_id>
# 查看容器的日志路径
docker inspect -f '{{.LogPath}}' <container_name_or_id>
4.4.docker stats - 查看容器资源使用情况
# 查看所有运行中容器的实时资源使用情况
docker stats
# 查看指定容器的资源使用情况
docker stats <container_name_or_id> <another_container_name_or_id>
# 只显示一次当前的资源使用情况(不持续流式输出)
docker stats --no-stream
4.5.docker top - 查看容器内进程
# 查看容器内的进程列表
docker top <container_name_or_id>
4.6.docker diff - 查看容器文件系统变化
docker diff <container_name_or_id>
# 输出示例:
# A /tmp/new_file # A = Added (添加)
# C /etc/config.conf # C = Changed (修改)
# D /var/log/old.log # D = Deleted (删除)
5.容器内操作
5.1.docker exec - 在运行中的容器内执行命令
# 在运行中的容器内执行一次命令
docker exec <container_name_or_id> ls /app
# 启动一个交互式 Bash Shell 到容器中(最常用!)
docker exec -it <container_name_or_id> /bin/bash
docker exec -it <container_name_or_id> /bin/sh
# 以root用户身份进入容器(如果当前用户不是root)
docker exec -u root -it <container_name_or_id> /bin/bash
# 在指定工作目录下执行命令
docker exec -w /path/to/dir <container_name_or_id> pwd
5.5.docker cp - 复制文件/目录
# 从容器复制文件到主机
docker cp <container_name_or_id>:/path/to/file.txt /host/path/target.txt
# 从主机复制文件到容器
docker cp /host/path/file.txt <container_name_or_id>:/container/path/
# 复制整个目录
docker cp /host/folder <container_name_or_id>:/container/path/
6.实际操作
#1、一键清理
# 停止所有运行中的容器
docker stop $(docker ps -aq)
# 删除所有容器
docker rm $(docker ps -aq)
# 删除所有未被使用的镜像、容器、网络、构建缓存(谨慎使用!)
docker system prune -a
#2、查看容器资源限制
# 查看容器的内存和CPU限制
docker inspect <container_name_or_id> | grep -i "memory\|cpus"
#3、修改容器限制(需容器)
# 停止容器
docker stop my_container
# 使用 `docker update` 命令修改运行配置(如内存)
docker update --memory 512m my_container
# 启动容器
docker start my_container
7、综合示例
#1、拉取镜像
docker pull nginx:alpine
#2、运行容器
docker run -d \
--name my-webapp \
-p 80:80 \
-v $(pwd)/html:/usr/share/nginx/html \
nginx:alpine
#3、检查状态
docker ps
docker logs my-webapp
#4、进入容器调试
docker exec -it my-webapp /bin/sh
# 在容器内:检查配置文件、日志等
#5、停止和清理
docker stop my-webapp
docker rm my-webapp
更多推荐



所有评论(0)