入门 Docker 和 Docker Compose,建议先在本地安装 Docker 后用单个容器练手,熟悉镜像、容器、端口映射等核心概念后再用 Compose 编排多服务,这样学习曲线更平缓且问题容易定位。
先说结论:Docker 适合解决环境一致性和快速部署问题,Docker Compose 适合管理多容器应用,新手应按「安装→单容器→多容器编排」的顺序学习。
- 适合:开发测试环境、单机部署、微服务本地联调
- 先看:镜像与容器区别、端口映射、数据卷持久化
- 建议:先在本地跑通官方镜像,再尝试自定义 Dockerfile,最后用 Compose 编排多服务
命令速用版
下面是经过验证的基础命令,可直接在 Linux 终端执行:
docker `--version` # 查看 Docker 版本 docker pull nginx:latest # 拉取官方镜像 docker run -d -p 8080:80 nginx # 启动容器,主机 8080 映射容器 80 docker ps # 查看运行中的容器 docker logs <容器 ID> # 查看容器日志 docker-compose `--version` # 查看 Compose 版本 docker-compose up -d # 后台启动所有服务 docker-compose down # 停止并清理容器、网络
为什么会这样
Docker 的本质是容器化引擎,它把代码、运行环境、依赖库、配置文件打包到一个叫「镜像」的标准化盒子里。这个盒子在任何安装了 Docker 的机器上都能一键运行,不用考虑底层系统和环境差异。
新手常混淆的 4 个核心概念:
- 镜像 (Image):只读的模板,类似软件安装包,不能直接修改
- 容器 (Container):基于镜像创建的运行实例,可以启动、停止、删除
- Dockerfile:文本文件,定义如何构建自定义镜像
- 数据卷 (Volume):用于持久存储数据,容器删除后数据不丢失
Docker Compose 则是多容器编排工具,通过一个 YAML 文件定义多个服务的配置,用单个命令就能创建和启动所有容器。它管理三个层级:工程(运行目录)、服务(子项目)、容器(服务实例)。
分步处理
第一步:安装 Docker
在基于 Linux 内核的系统中,可使用官方一键安装脚本:
curl -fsSL https://get.docker.com | bash -s docker sudo systemctl enable docker sudo systemctl start docker docker version
检查点:执行docker version后应显示 Client 和 Server 版本信息,无报错即安装成功。
第二步:跑通第一个容器
从官方仓库拉取 Nginx 镜像并启动:
docker pull nginx:latest docker run -d -p 8080:80 `--name` my-nginx nginx curl http://localhost:8080
检查点:浏览器访问http://localhost:8080能看到 Nginx 欢迎页,说明端口映射成功。
第三步:编写自定义 Dockerfile
以 SpringBoot 应用为例,在项目根目录创建 Dockerfile:
FROM openjdk:8 EXPOSE 8080 ADD target/myapp-0.0.1-SNAPSHOT.jar /demo.jar ENTRYPOINT ["java", "-jar", "demo.jar"]
构建并运行:
docker build -t myapp:latest . docker run -d -p 8080:8080 myapp
检查点:docker images能看到自定义镜像,docker ps能看到运行中的容器。
第四步:用 Compose 编排多服务
在项目根目录创建docker-compose.yml:
version: "3.9"
services:
myapp:
build: .
ports:
- "8080:8080"
depends_on:
- db
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root123
volumes:
- db-data:/var/lib/mysql
volumes:
db-data:启动服务:
docker-compose up -d docker-compose ps
检查点:两个容器都应处于 Up 状态,应用能正常连接数据库。
怎么验证是否生效
- 容器状态:
docker ps或docker-compose ps查看容器是否 Running - 端口访问:浏览器或 curl 访问映射端口,确认服务响应
- 日志检查:
docker logs <容器 ID>或docker-compose logs 服务名查看有无报错 - 数据持久化:删除容器后重新创建,检查数据卷中的数据是否还在
- 服务依赖:确认 depends_on 配置的服务先启动,应用能正常连接
常见坑
- 容器能启动但外部访问不到:检查端口映射是否正确,防火墙是否放行,容器内服务是否监听 0.0.0.0 而非 127.0.0.1
- 容器删除后数据全丢:重要数据必须挂载数据卷,不要直接写在容器文件系统里
- 镜像体积过大:使用多阶段构建,把编译环境和运行环境分开,最终镜像只保留可执行文件
- 服务之间连不上:Compose 会自动创建默认网络,服务名可直接作为主机名访问,不要写 localhost
- 配置文件没生效:检查 volumes 挂载路径是否正确,容器内路径要与应用配置一致
- Compose 版本兼容性:docker-compose.yml 的 version 字段与 Docker Compose 版本需匹配,公开资料中没有看到可靠的量化数据说明各版本差异,建议参考官方文档
参考来源
- Docker 官方文档 - Get started with Docker Compose,URL:https://docs.docker.com/compose/
- 阿里云开发者社区 - docker-compose 快速入门及实战,发布日期:2022 年 10 月 23 日
- CSDN - Docker 与 Docker Compose 入门:释放你的应用部署的威力,收录日期:2024 年 1 月 18 日
- 博客园 - 云原生之 Docker 篇 Docker Compose 介绍及使用入门,发布日期:2022 年 10 月 11 日
- 知乎 - Docker Compose:从入门到企业级部署,资料日期:2025 年 7 月 18 日