Docker 的核心操作围绕镜像 和容器展开,其常用命令可系统性地分为信息查看、镜像管理、容器生命周期管理、容器交互与运维、网络与存储、以及多容器编排等类别。掌握这些命令是高效使用 Docker 的基础 。
一、 系统信息与帮助
这类命令用于查看 Docker 环境状态和获取命令帮助。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker version |
显示 Docker 客户端和服务端的版本信息 。 | docker version |
docker info |
显示 Docker 系统的详细信息,包括容器、镜像数量、存储驱动等 。 | docker info |
docker --help |
查看 Docker 命令的总体帮助信息 。 | docker --help |
docker <command> --help |
查看具体子命令的详细用法和参数 。 | docker run --help |
二、 镜像管理
镜像是创建容器的模板,管理镜像是 Docker 使用的第一步。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker images |
列出本地所有镜像 。 | docker images |
docker search <image_name> |
从 Docker Hub 仓库搜索镜像 。 | docker search nginx |
docker pull <image_name>[:tag] |
从仓库拉取(下载)指定镜像到本地 。 | docker pull nginx:alpine |
docker rmi <image_id> |
删除指定的本地镜像 。 | docker rmi d1a364dc548d |
docker tag <image> <new_name>[:tag] |
为镜像创建一个新的标签(别名)。 | docker tag nginx mynginx:v1 |
docker build -t <image_name> . |
根据当前目录的 Dockerfile 构建一个新的镜像 。 |
docker build -t myapp:latest . |
docker push <image_name> |
将本地镜像推送到远程仓库(需先登录)。 | docker push myregistry/myapp:latest |
docker save -o <file.tar> <image> |
将镜像保存为 .tar 归档文件,用于备份或迁移 。 |
docker save -o nginx.tar nginx:latest |
docker load -i <file.tar> |
从 .tar 归档文件加载镜像到本地 。 |
docker load -i nginx.tar |
docker history <image> |
查看镜像的构建历史记录 。 | docker history nginx |
三、 容器生命周期管理
容器是镜像的运行实例,以下命令控制容器的创建、启动、停止和删除。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker run [options] <image> |
核心命令:创建并启动一个新容器 。 | 见下方详细说明 |
docker ps |
列出正在运行的容器 。 | docker ps |
docker ps -a |
列出所有容器(包括已停止的)。 | docker ps -a |
docker start <container> |
启动一个已停止的容器 。 | docker start my_container |
docker stop <container> |
优雅地停止一个运行中的容器 。 | docker stop my_container |
docker restart <container> |
重启一个容器 。 | docker restart my_container |
docker kill <container> |
强制立即终止一个运行中的容器 。 | docker kill my_container |
docker rm <container> |
删除一个已停止的容器 。 | docker rm my_container |
docker rm -f <container> |
强制删除一个容器(无论是否在运行)。 | docker rm -f my_container |
docker rm $(docker ps -aq) |
删除所有已停止的容器(结合子命令)。 | docker rm$(docker ps -aq) |
docker create [options] <image> |
创建一个容器但不立即启动它 。 | docker create --name test nginx |
docker run 是最复杂也最常用的命令,其核心选项决定了容器的运行方式 :
bash
# 基础运行:前台运行一个容器,输出日志到当前终端
docker run nginx
# 后台运行:使用 -d (detach) 参数让容器在后台运行
docker run -d --name my_nginx nginx
# 端口映射:将容器的80端口映射到主机的8080端口
docker run -d -p 8080:80 --name web nginx
# 数据卷挂载:将主机 /opt/data 目录挂载到容器的 /usr/share/nginx/html 目录
docker run -d -v /opt/data:/usr/share/nginx/html --name web_with_data nginx
# 环境变量:向容器内传入环境变量
docker run -d -e "MYSQL_ROOT_PASSWORD=123456" --name mysql mysql:5.7
# 交互式运行:启动一个可交互的容器(如Ubuntu),并分配一个伪终端
docker run -it ubuntu /bin/bash
四、 容器交互与运维
当容器运行后,需要与之交互或查看其状态。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker exec [options] <container> <command> |
核心命令:在运行中的容器内执行命令 。 | docker exec -it my_nginx /bin/bash |
docker attach <container> |
连接到正在运行的容器的标准输入、输出和错误流(不推荐,退出可能导致容器停止)。 | docker attach my_container |
docker logs [options] <container> |
查看容器的日志输出 。 | docker logs -f --tail 100 my_nginx |
docker top <container> |
查看容器内运行的进程信息 。 | docker top my_nginx |
docker stats |
动态显示所有运行中容器的资源使用情况(CPU、内存等)。 | docker stats |
docker cp <src> <dest> |
在容器和主机之间复制文件或目录 。 | docker cp my_nginx:/etc/nginx/nginx.conf ./ |
docker inspect <object> |
获取容器、镜像等 Docker 对象的底层详细信息(JSON格式)。 | docker inspect my_nginx |
docker commit <container> <new_image> |
将容器的当前状态提交为一个新的镜像(慎用,推荐使用Dockerfile)。 | docker commit my_nginx nginx:modified |
docker update [options] <container> |
动态更新容器的配置(如内存限制)。 | docker update --memory 512m my_nginx |
五、 网络与数据管理
Docker 的网络和数据卷提供了容器间通信和持久化存储的能力。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker network ls |
列出所有 Docker 网络 。 | docker network ls |
docker network create <network_name> |
创建一个自定义网络 。 | docker network create mynet |
docker network connect <network> <container> |
将容器连接到指定网络 。 | docker network connect mynet my_nginx |
docker volume ls |
列出所有 Docker 数据卷 。 | docker volume ls |
docker volume create <volume_name> |
创建一个数据卷 。 | docker volume create mydata |
docker volume inspect <volume> |
查看数据卷的详细信息 。 | docker volume inspect mydata |
六、 Docker Compose(多容器编排)
对于由多个关联容器组成的应用,使用 Docker Compose 可以通过一个 YAML 文件定义和运行所有服务,极大简化了管理流程 。
-
定义服务 (
docker-compose.yml):yamlversion: '3.8' services: web: image: nginx:alpine ports: - "80:80" volumes: - ./html:/usr/share/nginx/html db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example volumes: - db_data:/var/lib/mysql volumes: db_data: -
常用 Compose 命令:
命令 功能描述 docker-compose up创建并启动所有服务(前台运行)。 docker-compose up -d创建并在后台启动所有服务 。 docker-compose down停止并移除所有容器、网络等资源 。 docker-compose ps列出项目中的所有容器 。 docker-compose logs查看所有服务的日志 。 docker-compose exec <service> <command>在指定服务的容器内执行命令 。
七、 登录与仓库
需要与私有或公有镜像仓库交互时使用。
| 命令 | 功能描述 | 示例 |
|---|---|---|
docker login |
登录到 Docker 镜像仓库(默认是 Docker Hub)。 | docker login |
docker logout |
从 Docker 镜像仓库登出 。 | docker logout |
实战案例:部署一个简单的 Web 应用
结合以上命令,一个典型的 Docker 使用流程如下 :
bash
# 1. 从仓库拉取 Nginx 镜像
docker pull nginx:alpine
# 2. 创建本地网页文件
mkdir ~/myweb && echo "<h1>Hello Docker!</h1>" > ~/myweb/index.html
# 3. 运行容器,映射端口并挂载数据卷
docker run -d --name my_web -p 8080:80 -v ~/myweb:/usr/share/nginx/html nginx:alpine
# 4. 验证:在浏览器访问 http://localhost:8080,应看到 "Hello Docker!"
# 5. 查看容器日志
docker logs my_web
# 6. 进入容器内部查看文件
docker exec -it my_web /bin/sh
# 在容器内执行:ls /usr/share/nginx/html
# 7. 停止并清理容器
docker stop my_web
docker rm my_web