在容器化技术日益普及的今天,掌握 Docker 命令是每一位后端工程师的必备技能。本文将系统总结 Docker 的常用命令,并通过实际场景案例,深入剖析其底层原理,助你轻松驾驭 Docker,提升开发效率。例如,我们常常需要在 Docker 容器中运行 Nginx 来实现反向代理和负载均衡,此时就需要熟练掌握 Docker 的端口映射、数据卷挂载等操作。
镜像管理
镜像(Image)是 Docker 容器的基础,包含了运行应用程序所需的所有依赖项和配置。
docker pull: 从 Docker Hub 或其他镜像仓库拉取镜像。docker pull nginx:latest # 拉取最新版本的 Nginx 镜像docker images: 列出本地已有的镜像。docker images # 显示本地镜像列表docker rmi: 删除本地镜像。docker rmi nginx:latest # 删除 nginx:latest 镜像 docker rmi <image_id> # 根据镜像 ID 删除镜像docker build: 使用 Dockerfile 构建镜像。
docker build -t my-app:1.0 . # 从当前目录的 Dockerfile 构建名为 my-app,标签为 1.0 的镜像docker push: 将镜像推送到 Docker Hub 或其他镜像仓库。docker login # 首先需要登录 docker push your-username/my-app:1.0 # 将 my-app:1.0 推送到 Docker Hub
容器管理
容器(Container)是镜像的运行时实例,可以启动、停止、删除等。
docker run: 创建并启动一个新的容器。docker run -d -p 80:80 nginx:latest # 在后台运行 Nginx 容器,并将宿主机的 80 端口映射到容器的 80 端口 docker run -it ubuntu bash # 以交互模式运行 Ubuntu 容器,并进入容器的 bash 终端docker ps: 列出正在运行的容器。docker ps # 显示正在运行的容器 docker ps -a # 显示所有容器,包括已停止的容器docker stop: 停止一个正在运行的容器。
docker stop <container_id> # 停止指定 ID 的容器docker start: 启动一个已停止的容器。docker start <container_id> # 启动指定 ID 的容器docker restart: 重启一个容器。docker restart <container_id> # 重启指定 ID 的容器docker rm: 删除一个已停止的容器。docker rm <container_id> # 删除指定 ID 的容器 docker rm -f <container_id> # 强制删除正在运行的容器docker exec: 在一个正在运行的容器中执行命令。docker exec -it <container_id> bash # 进入指定 ID 容器的 bash 终端 docker exec <container_id> ls /app # 在指定 ID 容器中执行 ls /app 命令docker logs: 查看容器的日志输出。
docker logs <container_id> # 查看指定 ID 容器的日志 docker logs -f <container_id> # 实时查看指定 ID 容器的日志
网络管理
Docker 提供了多种网络模式,用于容器之间的通信以及容器与宿主机之间的通信。
docker network create: 创建一个新的网络。docker network create my-network # 创建一个名为 my-network 的网络docker network connect: 将容器连接到一个网络。docker network connect my-network <container_id> # 将指定 ID 的容器连接到 my-networkdocker network disconnect: 将容器从一个网络断开。docker network disconnect my-network <container_id> # 将指定 ID 的容器从 my-network 断开docker network ls: 列出所有的网络。
docker network ls # 显示所有网络列表
数据卷管理
数据卷(Volume)是用于持久化存储容器数据的机制,即使容器被删除,数据卷中的数据仍然存在。
docker volume create: 创建一个新的数据卷。docker volume create my-volume # 创建一个名为 my-volume 的数据卷docker run -v: 在运行容器时挂载数据卷。docker run -d -v my-volume:/data nginx:latest # 将名为 my-volume 的数据卷挂载到 Nginx 容器的 /data 目录 docker run -d -v /host/path:/container/path nginx:latest # 将宿主机 /host/path 目录挂载到容器的 /container/path 目录docker volume ls: 列出所有的数据卷。docker volume ls # 显示所有数据卷列表docker volume inspect: 查看数据卷的详细信息。docker volume inspect my-volume # 查看 my-volume 数据卷的详细信息
实战避坑
- 镜像体积优化:尽量选择 Alpine Linux 作为基础镜像,减小镜像体积。可以使用多阶段构建,减少最终镜像中的冗余文件。
- 数据卷权限问题:确保容器内运行的用户对数据卷具有读写权限,避免出现权限错误。
- 网络连接问题:容器间通信时,可以使用容器名称或 service name 作为主机名,方便服务发现。
- 资源限制:合理配置容器的 CPU 和内存资源限制,防止容器占用过多资源,影响宿主机或其他容器的运行。
Docker 命令是容器化技术的核心,熟练掌握这些命令,可以帮助你更好地管理 Docker 镜像和容器,构建高效、可靠的应用程序。例如,在实际项目中,经常使用宝塔面板来管理服务器,结合 Docker 部署应用,可以大大简化部署流程,提升运维效率。
冠军资讯
CoderPunk