Docker 是一个领先的开源容器化平台,旨在帮助开发者将应用程序及其所有依赖项打包到一个轻量级、可移植的容器中,从而实现跨平台的一致运行环境。以下是全面且专业的 Docker 命令指南,涵盖镜像管理、容器操作、网络配置、存储卷管理、Docker Compose 使用以及其他高级命令。
1. Docker 镜像(Images)管理命令
1.1 拉取和构建镜像
拉取镜像
docker pull <image_name>[:<tag>]
从 Docker Hub 或指定的镜像仓库拉取指定镜像及其标签。
构建镜像
docker build -f <Dockerfile_path> -t <image_name>:<tag> <context_path>
使用 Dockerfile 从指定上下文路径构建镜像,并打上标签。
1.2 管理本地镜像
列出本地镜像
docker images [OPTIONS]
显示本地所有镜像,支持过滤和格式化输出。
删除镜像
docker rmi <image_name>[:<tag>]
删除指定镜像,支持强制删除和多镜像批量删除。
标记镜像
docker tag <source_image>:<tag> <repository>:<new_tag>
为现有镜像添加新的标签,便于版本管理和推送到不同仓库。
查看镜像详细信息
docker inspect <image_name>[:<tag>]
获取镜像的底层元数据,包括配置、层信息和历史记录。
查看镜像历史
docker history <image_name>[:<tag>]
展示镜像构建过程中每一层的变更历史。
1.3 导出和导入镜像
保存镜像为归档文件
docker save -o <filename>.tar <image_name>[:<tag>]
将镜像导出为 tar 文件,便于迁移和备份。
从归档文件加载镜像
docker load -i <filename>.tar
从 tar 文件中加载镜像到本地 Docker 环境。
2. Docker 容器(Containers)操作命令
2.1 创建和运行容器
运行容器
docker run [OPTIONS] <image_name>[:<tag>] [COMMAND] [ARG...]
创建并启动一个新容器,可结合多种选项如端口映射、环境变量等。
示例:后台运行 Nginx 容器并映射端口
docker run -d -p 80:80 --name my-nginx nginx
交互式运行容器
docker run -it --rm <image_name>[:<tag>] /bin/bash
启动一个交互式容器,进入 Bash 终端,容器停止后自动删除。
2.2 管理容器生命周期
列出运行中的容器
docker ps [OPTIONS]
列出所有容器(包括停止的)
docker ps -a
启动已停止的容器
docker start <container_id|container_name>
停止运行中的容器
docker stop <container_id|container_name>
重启容器
docker restart <container_id|container_name>
杀死容器
docker kill <container_id|container_name>
2.3 进入和操作容器
进入容器终端
docker exec -it <container_id|container_name> /bin/bash
在运行中的容器内启动交互式 Bash 终端。
附加到容器的标准输入输出
docker attach <container_id|container_name>
查看容器日志
docker logs [OPTIONS] <container_id|container_name>
实时或历史查看容器的日志输出,支持跟随日志(
-f
)。查看容器资源使用情况
docker stats [OPTIONS] [<container_id|container_name>...]
实时监控容器的 CPU、内存、网络和磁盘使用情况。
2.4 删除容器
删除容器
docker rm [OPTIONS] <container_id|container_name>
删除一个或多个容器,支持强制删除(
-f
)和批量删除。清理所有已停止的容器
docker container prune
交互式确认后删除所有停止的容器。
3. Docker 网络(Networking)管理命令
3.1 管理 Docker 网络
列出所有网络
docker network ls
创建网络
docker network create [OPTIONS] <network_name>
创建自定义网络,支持多种驱动如 bridge、overlay、macvlan 等。
示例:创建桥接网络
docker network create -d bridge my-bridge-network
查看网络详细信息
docker network inspect <network_name>
删除网络
docker network rm <network_name>
3.2 连接和断开容器与网络
将容器连接到网络
docker network connect <network_name> <container_id|container_name>
将容器从网络断开
docker network disconnect <network_name> <container_id|container_name>
3.3 高级网络配置
创建覆盖网络(Overlay Network)
docker network create -d overlay --subnet=192.168.0.0/16 --gateway=192.168.0.1 my-overlay-network
用于 Docker Swarm 或多主机容器通信。
配置自定义子网和 IP 范围
docker network create -d bridge \ --subnet=192.170.0.0/16 \ --ip-range=192.170.1.0/24 \ --gateway=192.170.0.1 \ my-custom-network
4. Docker 卷(Volumes)管理命令
4.1 管理数据卷
列出所有卷
docker volume ls
创建卷
docker volume create [OPTIONS] <volume_name>
支持指定驱动和标签。
查看卷详细信息
docker volume inspect <volume_name>
删除卷
docker volume rm <volume_name>
清理未使用的卷
docker volume prune
4.2 挂载卷到容器
在运行容器时挂载卷
docker run -d -v <volume_name>:<container_path> <image_name>
将指定卷挂载到容器内的路径。
使用主机路径挂载
docker run -d -v /host/path:/container/path <image_name>
将主机目录或文件挂载到容器中,实现数据共享和持久化。
5. Docker Compose 命令
Docker Compose 是用于定义和管理多容器 Docker 应用的工具,通过 docker-compose.yml
文件描述服务、网络和卷等配置。
5.1 基本操作
启动服务
docker-compose up
根据
docker-compose.yml
文件构建并启动所有定义的服务。后台启动服务
docker-compose up -d
以分离模式在后台启动服务。
停止并删除服务
docker-compose down
停止所有服务并移除容器、网络、卷和镜像(根据选项)。
构建或重建服务
docker-compose build
5.2 查看和管理
查看服务日志
docker-compose logs [OPTIONS] [SERVICE...]
实时或历史查看指定服务的日志。
查看运行中的服务
docker-compose ps
扩展服务实例
docker-compose scale <service>=<num>
增加或减少特定服务的容器实例数量。
5.3 其他高级操作
拉取服务镜像
docker-compose pull
推送服务镜像
docker-compose push
重启服务
docker-compose restart [SERVICE...]
6. Docker 其他常用命令
6.1 系统信息和维护
查看 Docker 版本
docker version
查看 Docker 系统信息
docker info
清理系统资源
docker system prune [OPTIONS]
删除未使用的容器、网络、镜像和构建缓存,释放磁盘空间。
6.2 容器和镜像管理
查看容器文件系统变化
docker diff <container_id|container_name>
提交容器更改为新镜像
docker commit [OPTIONS] <container_id|container_name> <new_image_name>:<tag>
查看容器的端口映射
docker port <container_id|container_name>
查看容器内运行的进程
docker top <container_id|container_name>
6.3 镜像仓库操作
推送镜像到仓库
docker push <repository>/<image_name>:<tag>
登录到 Docker 仓库
docker login [OPTIONS] [SERVER]
登出 Docker 仓库
docker logout [SERVER]
7. 高级命令和最佳实践
7.1 多阶段构建
利用多阶段构建优化镜像大小和构建效率。
# 第一阶段:构建 FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN go build -o myapp # 第二阶段:运行 FROM alpine:latest COPY --from=builder /app/myapp /usr/local/bin/myapp ENTRYPOINT ["myapp"]
7.2 Docker Swarm 管理
用于集群管理和服务编排。
初始化 Swarm
docker swarm init
添加节点到 Swarm
docker swarm join --token <token> <manager_ip>:2377
查看 Swarm 节点
docker node ls
部署服务到 Swarm
docker service create --name <service_name> --replicas <number> <image_name>
7.3 安全与权限管理
限制容器资源
docker run --memory="256m" --cpus="1.0" <image_name>
运行容器以非 root 用户
docker run -u <user_id>:<group_id> <image_name>
使用 Docker Secrets 管理敏感信息
docker secret create <secret_name> <file>
7.4 日志和监控
配置日志驱动
docker run --log-driver=syslog <image_name>
集成监控工具(如 Prometheus)通过导出容器指标并配置监控系统进行实时监控和报警。
8. 实践示例
8.1 部署一个完整的 Web 应用
步骤:
编写
docker-compose.yml
version: '3.8' services: web: image: nginx:latest ports: - "80:80" volumes: - ./html:/usr/share/nginx/html networks: - webnet db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: example volumes: - db-data:/var/lib/mysql networks: - webnet networks: webnet: volumes: db-data:
启动服务
docker-compose up -d
查看服务状态
docker-compose ps
访问 Web 应用在浏览器中访问
http://localhost
查看 Nginx 欢迎页面。停止并清理
docker-compose down -v
8.2 使用自定义网络和卷
创建自定义网络
docker network create -d bridge my-bridge-network
运行数据库容器并连接到网络
docker run -d --name my-mysql --network my-bridge-network -e MYSQL_ROOT_PASSWORD=example mysql:5.7
运行应用容器并挂载卷
docker run -d --name my-app --network my-bridge-network -v app-data:/app/data my-app-image
查看网络连接
docker network inspect my-bridge-network
总结
上述命令涵盖了 Docker 容器化平台的核心功能,帮助开发者高效管理镜像、容器、网络和存储卷,并通过 Docker Compose 实现多容器应用的编排与部署。此外,介绍了高级命令和最佳实践,如多阶段构建、Swarm 集群管理、安全配置以及日志监控等,进一步提升容器化应用的性能、安全性和可维护性。通过深入掌握这些命令,开发者能够充分利用 Docker 的强大功能,优化开发和运维流程。