跳到主要内容

Docker 常用命令详解

容器管理命令

容器是 Docker 的核心组件,我将在此详解常用的容器管理命令。

命令功能命令代码
创建并启动 Nginx 容器docker run -d --name my-nginx -p 80:80 nginx
停止容器docker stop my-nginx
启动容器docker start my-nginx
重启容器docker restart my-nginx
删除容器docker rm my-nginx
列出正在运行的容器docker ps
列出所有容器(包括已停止的)docker ps -a

docker run 命令用于创建并启动容器。-d 表示后台运行,--name 指定容器名称,-p 映射主机端口到容器端口。在运行容器时,可以使用 -v 参数挂载数据卷,例如 -v sumingcheng:/data

docker stopdocker startdocker restart 命令分别用于停止、启动和重启容器。若需要强制停止容器,可以使用 docker kill 命令。

docker rm 命令用于删除容器。删除前需先停止容器,或使用 docker rm -f 强制删除正在运行的容器。

docker ps 命令用于查看正在运行的容器,添加 -a 参数可显示所有容器,包括已停止的。

使用 docker logs my-nginx 命令可以查看容器日志,添加 -f 参数可以实时跟踪日志输出。

通过 docker exec -it my-nginx /bin/bash 命令可以进入容器的交互式终端,进行内部操作。

使用 docker commit my-nginx my-nginx-image 命令可以将容器的当前状态保存为新的镜像,便于后续使用或分发。

最佳实践

运行容器时,使用 --rm 参数可以在容器退出后自动删除容器,节省系统资源。定期清理不再使用的容器,保持系统的整洁和高效。

镜像管理命令

镜像是创建容器的基础,我将介绍常用的镜像管理命令。

命令功能命令代码
拉取 Nginx 镜像docker pull nginx
列出所有本地镜像docker images
删除镜像docker rmi nginx
构建镜像docker build -t my-nginx-image .

docker pull 命令用于从 Docker Hub 或私有仓库拉取镜像。

docker images 命令列出本地所有镜像,包括仓库名、标签和大小等信息。

docker rmi 命令用于删除本地镜像。若镜像被容器使用,需先删除相关容器。

docker build 命令根据 Dockerfile 构建镜像,-t 参数为镜像指定名称和标签。

给镜像打标签可以使用 docker tag my-nginx-image my-nginx-image:v1.0,便于版本管理。查看镜像历史可以使用 docker history my-nginx-image,了解镜像的构建历史层次。

最佳实践

构建镜像时,建议使用轻量级的基础镜像,如 alpine,以减小镜像大小。使用 .dockerignore 文件忽略不必要的文件,优化构建效率。

网络管理命令

Docker 网络用于容器间通信,我将介绍常用的网络管理命令。

命令功能命令代码
创建网络docker network create nginx-network
列出所有网络docker network ls
删除网络docker network rm nginx-network
将容器连接到网络docker network connect nginx-network my-nginx
从网络断开容器docker network disconnect nginx-network my-nginx

docker network create 命令用于创建一个自定义网络,默认类型为 bridge。可以使用 --driver 参数指定网络类型,例如 overlay,适用于 Swarm 集群环境。

docker network connectdocker network disconnect 命令用于将容器连接到网络或从网络断开,方便灵活地管理容器通信。

可以使用 docker network inspect nginx-network 查看网络的详细信息,包括连接的容器、网络配置等。

在运行容器时,使用 docker run --network nginx-network nginx 指定容器加入特定网络。

创建覆盖网络(用于 Swarm 集群)可以使用 docker network create --driver overlay my-overlay-network,支持跨主机的容器通信。

最佳实践

使用自定义网络时,容器可以通过容器名称互相通信,简化配置。避免使用默认 bridge 网络,通过创建专用网络提升安全性和管理便捷性。

数据卷管理命令

数据卷用于持久化容器数据,我将介绍常用的数据卷管理命令。

命令功能命令代码
创建数据卷docker volume create nginx-data
列出所有数据卷docker volume ls
删除数据卷docker volume rm nginx-data
查看卷详细信息docker volume inspect nginx-data

docker volume create 命令用于创建一个数据卷,便于管理持久化数据。

在运行容器时,使用 -v nginx-data:/data 将数据卷挂载到容器的 /data 目录,确保数据在容器重启或删除后依然存在。

数据卷不会随着容器的删除而删除,需要手动清理未使用的数据卷,保持系统整洁。

挂载主机目录到容器可以使用 docker run -v /host/data:/container/data nginx,直接使用主机目录作为数据卷,便于与主机文件系统集成。

删除未使用的数据卷可以使用 docker volume prune,清理所有未被使用的数据卷,释放磁盘空间。

最佳实践

使用命名数据卷管理持久化数据,更方便维护和识别。数据卷的性能通常优于绑定主机目录(bind mount),适合需要高效读写的场景。

容器监控和日志命令

为了维护容器的稳定运行,监控和日志非常重要,我将介绍相关命令。

命令功能命令代码
查看容器日志docker logs my-nginx
实时跟踪容器日志docker logs -f my-nginx
查看容器内部运行的进程docker top my-nginx
显示容器资源使用统计docker stats my-nginx
查看容器详细信息docker inspect my-nginx

使用 docker logs my-nginx 命令可以获取容器的标准输出日志。添加 -f 参数实时跟踪日志输出,类似于 tail -f,便于监控应用运行情况。

docker top my-nginx 命令查看容器内部运行的进程列表,帮助排查应用问题。

docker stats my-nginx 命令显示容器的实时资源使用情况,包括 CPU、内存、网络等,便于资源监控和优化。

docker inspect my-nginx 命令查看容器的详细配置信息,包括网络设置、挂载卷、环境变量等,有助于深入了解容器运行环境。

设置日志驱动:运行容器时可以使用 --log-driver 参数设置日志驱动,例如 json-filesyslog 等,满足不同的日志管理需求。

限制容器资源:运行容器时使用 --memory--cpus 等参数限制容器的资源使用,防止容器占用过多主机资源,影响系统稳定性。

最佳实践

使用监控工具如 Prometheus 和 Grafana 对容器进行长期监控,及时发现和解决性能瓶颈。设置资源限制可以防止单个容器影响整个系统的性能和稳定性。

执行命令

在容器中执行命令或进入容器内部,我将介绍相关命令。

命令功能命令代码
在容器中执行命令docker exec -it my-nginx bash

docker exec 命令用于在运行中的容器内执行命令。

-it 参数中,-i 保持标准输入打开,-t 分配一个伪终端,便于交互操作。

若容器内无 bash,可使用 sh 或其他可用的 Shell,例如:

docker exec -it my-nginx sh

以交互模式启动容器可以使用:

docker run -it nginx /bin/bash

直接进入容器的交互式终端,进行实时操作。

在容器中运行单个命令可以使用:

docker exec my-nginx ls /usr/share/nginx/html

列出容器内指定目录的内容,便于快速查看文件结构。

最佳实践

尽量使用 Dockerfile 自动化构建镜像,减少手动进入容器执行命令的需求,提升环境一致性和可维护性。

常用补充命令

为更全面地使用 Docker,我整理了一些常用的补充命令。

命令功能命令代码
查看 Docker 版本信息docker version
查看 Docker 系统信息docker info
登录 Docker 注册服务器docker login
推送镜像到仓库docker push my-nginx-image
从容器创建新镜像docker commit my-nginx my-nginx-image:v2
清理未使用的资源docker system prune

docker version 命令用于查看客户端和服务器端的 Docker 版本信息,确保环境兼容性。

docker info 命令查看 Docker 系统的详细信息,包括镜像、容器数量、存储驱动等,有助于系统管理和优化。

docker login 命令用于登录到 Docker Hub 或私有仓库,执行 docker logout 可注销登录,确保账号安全。

docker push 命令将本地镜像推送到镜像仓库。确保镜像名称与仓库命名空间匹配,便于镜像管理和分发。

docker commit 命令将容器的当前状态保存为新的镜像。建议使用 Dockerfile 构建镜像,以保证可重复性和一致性。

docker system prune 命令清理未使用的容器、网络、镜像等资源,释放磁盘空间,保持系统整洁。

查看磁盘空间使用情况可以使用 docker system df,了解 Docker 相关资源占用的空间,便于磁盘管理。

导出镜像为文件:

docker save -o my-nginx-image.tar my-nginx-image

用于备份或传输镜像,方便在不同环境间迁移。

从文件导入镜像:

docker load -i my-nginx-image.tar

将导出的镜像文件加载到本地,快速恢复或部署镜像。

最佳实践

定期检查和清理未使用的 Docker 资源,防止磁盘空间不足。使用自动化脚本管理镜像和容器,提升运维效率。