docker 命令(建议收藏)
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观
前言
在现代软件开发中,Docker 已经成为容器化技术的基石。它通过标准化的环境隔离,解决了“在本地能运行,在生产环境却不行”的经典问题。而掌握 Docker 命令,是开发者高效利用这一工具的核心能力。本文将从零开始,通过循序渐进的方式讲解 Docker 命令的使用场景、原理与技巧,并结合实际案例帮助读者快速上手。无论是搭建开发环境、部署应用,还是调试容器,你都能从中找到实用的方法。
Docker 命令基础:容器生命周期管理
1. 创建与启动容器:docker run
docker run
是 Docker 的核心命令,用于从镜像创建并启动容器。其语法结构如下:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
常用参数解析:
-d
:后台运行容器(守护态模式)。-p
:端口映射,格式为主机端口:容器端口
。-v
:挂载数据卷,实现宿主机与容器之间的文件共享。--name
:为容器指定一个自定义名称。
案例:启动一个 Nginx 容器
docker run -d -p 8080:80 --name my-nginx nginx
此命令的作用是:
- 从 Nginx 镜像创建容器;
- 将容器的 80 端口映射到主机的 8080 端口;
- 以守护态运行,并命名为
my-nginx
。
比喻:
可以将 docker run
想象为“启动一个标准化的集装箱”。镜像就像集装箱的模板,而 run
命令则是根据模板制造并装载货物(应用)的过程。
2. 查看容器状态:docker ps
docker ps
用于列出正在运行的容器。添加 -a
参数可查看所有容器(包括已停止的)。
docker ps -a
输出结果包含容器 ID、名称、状态、端口映射等关键信息。
案例:查看所有容器
docker ps -a --format "table {{.ID}}\t{{.Names}}\t{{.Status}}"
此命令通过格式化输出,清晰展示容器的 ID、名称和运行状态。
3. 进入容器:docker exec
docker exec
允许开发者在运行中的容器内执行命令。例如:
docker exec -it my-nginx bash
此命令的作用是:
-i
:保持 STDIN 打开;-t
:分配一个伪终端;bash
:在容器内启动交互式 Shell。
比喻:
这相当于“打开集装箱的门,进入内部进行操作”。
4. 停止与删除容器:docker stop 和 docker rm
-
停止容器:
docker stop my-nginx
此命令向容器发送终止信号(SIGTERM),等待一段时间后强制停止。
-
删除容器:
docker rm my-nginx
注意:需先停止容器才能删除。若需直接删除,可用
docker rm -f my-nginx
(强制删除)。
进阶命令:镜像管理与网络配置
1. 拉取与构建镜像:docker pull 和 docker build
-
从仓库拉取镜像:
docker pull nginx:latest
此命令从 Docker Hub 获取最新版本的 Nginx 镜像。
-
基于 Dockerfile 构建镜像:
假设有一个简单的Dockerfile
:FROM python:3.9-slim COPY . /app WORKDIR /app RUN pip install -r requirements.txt CMD ["python", "app.py"]
构建命令为:
docker build -t my-python-app .
参数
-t
用于指定镜像名称。
2. 查看镜像列表:docker images
docker images
输出包含镜像名称、标签(Tag)、大小等信息。若需删除镜像,可使用 docker rmi <镜像ID>
。
3. 网络管理:docker network
Docker 容器默认连接到 bridge
网络,但可通过自定义网络实现更灵活的通信。例如:
docker network create my-network
docker run -d --name mysql_db --network my-network mysql:5.7
docker run -d --name app --network my-network my-python-app
此时,app
容器可通过 mysql_db
的名称直接访问数据库,无需暴露外部端口。
高级技巧:数据持久化与调试
1. 数据卷(Volumes):持久化存储
容器默认的文件系统是临时的,重启后数据会丢失。使用 docker volume
可实现持久化存储:
docker volume create my-data
docker run -d -v my-data:/app/data --name my-app my-python-app
此操作将容器的 /app/data
目录与宿主机的卷 my-data
绑定,数据不会随容器删除而丢失。
2. 调试与日志查看:docker logs
当容器出现异常时,可通过 docker logs
查看日志:
docker logs --tail 10 --follow my-nginx
参数说明:
--tail 10
:仅显示最后 10 行日志;--follow
:实时追踪日志(类似tail -f
)。
3. 多阶段构建:优化镜像体积
在 Dockerfile 中,可通过多阶段构建减少最终镜像的大小。例如:
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum .
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o myapp
FROM alpine:3.18
COPY --from=builder /app/myapp /usr/local/bin
CMD ["myapp"]
此方法将编译和运行环境分离,最终镜像仅包含运行时所需的文件。
最佳实践与常见问题
1. 命令组合技巧
- 快速删除所有停止的容器:
docker container prune -f
- 查看实时资源使用情况:
docker stats
2. 常见问题排查
- 端口冲突:若启动容器时提示端口被占用,可修改
-p
参数的主机端口。 - 镜像拉取失败:检查网络连接或更换镜像源(如阿里云镜像站)。
结论
Docker 命令的学习是一个从“掌握基础”到“灵活运用”的过程。通过本文的讲解,读者应能:
- 熟练管理容器生命周期(创建、启动、停止、删除);
- 理解镜像构建与网络配置的核心逻辑;
- 运用数据卷、多阶段构建等技巧优化开发效率。
实践是检验学习成果的最佳方式。建议读者尝试以下步骤:
- 使用
docker run
启动一个简单的 Web 应用; - 通过
docker exec
进入容器修改配置文件; - 创建自定义网络并验证容器间通信。
掌握 Docker 命令后,开发者可以更高效地管理本地开发环境、协作部署应用,并为后续学习 Docker Compose、Kubernetes 等进阶技术打下坚实基础。
希望这篇文章能成为你探索 Docker 世界的起点!如果有任何疑问或需要进一步讨论,欢迎在评论区留言。