跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
编程语言java

Docker 基础概念与常用命令实战

Docker 通过镜像和容器实现应用的轻量化封装。镜像作为只读模板定义环境,容器则是运行实例。相比传统虚拟机,Docker 具备更轻量的资源占用、更高的启动效率及更好的环境一致性优势。掌握 docker run、ps、exec、logs 等核心命令是基础,特别要注意后台模式下容器因前台进程缺失而退出的机制问题。梳理了从概念到实操的关键点,包括端口映射、日志查看及批量管理技巧,帮助快速上手容器化开发。

MongoKing发布于 2019/6/27更新于 2026/10/2685 浏览
Docker 基础概念与常用命令实战

Docker 基础概念与常用命令实战

核心概念:镜像与容器

Docker 利用容器(Container)独立运行一个或一组应用。简单来说,镜像(Image)就是一个只读模板,而容器则是基于镜像创建的运行实例。

打个比方,如果把镜像比作 Java 里的类(Class),那么容器就是类的实例对象:

Student s1 = new Student();
Student s2 = new Student();
Student s3 = new Student();

这里的 Student 就是镜像,s1/s2/s3 就是三个相互隔离的容器。仓库(Repository)则是存放这些镜像的地方。

为什么要用 Docker?

相比传统虚拟机,Docker 的优势非常明显:

  1. 更轻量:基于容器的虚拟化仅包含业务所需的 Runtime 环境。例如 CentOS/Ubuntu 基础镜像仅约 170MB,宿主机可轻松部署 100-1000 个容器。
  2. 更高效:没有操作系统虚拟化的开销,启动速度极快。
  3. 更敏捷:环境一致性高,开发、测试、生产环境差异小。

你可以把容器理解为一个精简版的 Linux 环境,去掉了硬件抽象层,直接共享宿主内核。

常用命令实战

1. 创建并启动容器

有镜像才能创建容器,这是根本前提。

docker run [options] image [command] [arg...]

常用参数说明:

  • -name="容器名":指定容器名称。
  • -d:后台运行(守护模式)。
  • -i:交互模式。
  • -t:分配伪终端,通常与 -i 配合使用。
  • -P:随机映射端口。
  • -p:指定端口映射,格式如 ip:hostPort:containerPort。

示例:交互式启动容器

docker run -it <image_id> bash

查看当前运行的容器列表:

docker ps

若需查看历史容器,加 -a 参数;只看最近创建的可用 -l 或 -n 3。

2. 退出与进入容器

退出容器有两种方式,别搞混了:

  1. exit:停止并退出容器。
  2. Ctrl + P + Q:不停止容器,仅退出当前终端会话。

如果想重新进入正在运行的容器,推荐使用 exec:

docker exec -it <容器 ID> bash

这会在容器中打开一个新的终端进程。相比之下,attach 是直接连接容器启动命令的终端,不会启动新进程,适合调试启动脚本,但日常操作建议用 exec。

3. 生命周期管理

  • 启动:docker start <容器 ID>
  • 重启:docker restart <容器 ID>
  • 停止:docker stop <容器 ID>(优雅停止)或 docker kill(强制停止)
  • 删除:docker rm <容器 ID>(需先停止)或 docker rm -f(强制删除)
  • 批量清理:docker rm -f $(docker ps -a -q)

删除镜像使用 docker rmi <镜像 ID>。

4. 后台运行陷阱(重要!)

很多新手在后台启动容器(docker run -d)后发现容器立即退出,这是因为 Docker 容器前台必须有进程在运行。如果启动的命令执行完就结束(如 service nginx start 这种后台服务),容器会认为没事做了而自杀。

解决方案:确保前台有持续运行的进程,或者将主程序以前台形式启动。

5. 日志与细节查看

  • 日志:docker logs -f -t --tail 3 <容器 ID>(实时跟随、带时间戳、显示最后 3 条)
  • 进程:docker top <容器 ID>
  • 详情:docker inspect <容器 ID>
  • 文件拷贝:docker cp <容器 ID>:路径 本地路径

最后,启动 Tomcat 这类 Web 服务时,记得暴露端口:

docker run -it -p 8888:8080 tomcat

这里 -p 表示对外暴露端口,格式为 主机端口:容器端口。

目录

  1. Docker 基础概念与常用命令实战
  2. 核心概念:镜像与容器
  3. 为什么要用 Docker?
  4. 常用命令实战
  5. 1. 创建并启动容器
  6. 2. 退出与进入容器
  7. 3. 生命周期管理
  8. 4. 后台运行陷阱(重要!)
  9. 5. 日志与细节查看

更多推荐文章

查看全部
  • AI 热榜深度解析:平台生态、多智能体与评测体系新趋势
  • LeetCode 92 链表区间反转:递归实现与哨兵技巧详解
  • VSCode 远程连接时 GitHub Copilot Chat 图标缺失修复
  • 基于 Vue3 与 Django 的线上文献阅览平台
  • C++ 手搓 JSON+HTTP Web 计算器服务器
  • 无人机群三维环境碰撞与静态避障仿真及 Matlab 实现
  • 基于 Shoelace 的零构建前端开发实践
  • Flutter 组件 BIP340 适配鸿蒙实现 Schnorr 签名实战
  • 基于宝塔面板与 Nginx 部署智能协同云图库项目实战
  • Visual Studio Code 中集成 Cursor AI 的完整指南
  • HTML、CSS、JavaScript 三者关系详解
  • Mac Mini M4 本地部署大模型:Ollama 与 Llama 环境配置指南
  • C++11 核心特性详解:初始化、移动语义与 Lambda 表达式
  • C++工具库之PugiXML使用指南
  • Java + Spring AI 智能体开发实战:构建全能 AI 助手
  • 基于 Claude Code 的 AI 内容创作自动化工作流实战
  • 网络安全专家常用的 9 大工具
  • Linux 动态库与静态库技术详解
  • C++ AVL 树原理与实现详解
  • VSCode Copilot 接入 OpenAI 兼容自定义模型方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online