Docker 快速学习
Docker 完全学习手册
合并自「Docker 快速学习」笔记 + gin-demo 项目 index.html 知识库,涵盖从入门到生产的全部核心内容。
目录
- 核心概念(先搞懂 3 个核心)
- Docker 安装与基础环境
- 高频命令(分模块记忆,日常 90% 操作)
- Dockerfile 镜像构建
- Docker Compose 多容器编排
- 镜像仓库分发
- 生产最佳实践
- Docker 与 K8s 区别
- 学习路线(快速上手顺序)
- 附加:常用命令速查表
一、核心概念(先搞懂 3 个核心)
1. 什么是 Docker
- 轻量级容器化工具,一次打包,到处运行
- 隔离应用环境:解决"本地能跑,服务器报错"的环境不一致问题
- 对比虚拟机:VM 需完整操作系统,Docker 共享宿主机内核,启动秒级、体积极小
| 对比维度 | Docker 容器 | 虚拟机 (VM) |
|---|---|---|
| 启动速度 | 秒级 / 毫秒级 | 分钟级 |
| 资源占用 | MB 级别,共享宿主机内核 | GB 级别,需完整 OS |
| 隔离级别 | 进程级隔离 (Namespace + Cgroup) | 硬件级隔离 (Hypervisor) |
| 镜像大小 | 通常几十 MB ~ 几百 MB | 通常几 GB |
| 迁移性 | 跨平台一致运行 | 依赖 Hypervisor 类型 |
| 密度 | 单机可运行数百个容器 | 单机通常十几个 VM |
Docker 是一款基于 Go 语言开发的开源容器化引擎,2013 年由 dotCloud 公司(后更名为 Docker Inc.)发布。核心思想是将应用程序、运行时依赖、系统库、环境变量、配置文件等打包成一个标准化的容器镜像,实现"一次构建、随处运行"。
2. 三大核心对象
| 对象 | 比喻 | 说明 |
|---|---|---|
| 镜像 (Image) | 安装包 / 模板 | 只读模板,包含代码、运行环境、依赖、配置;分层存储,可复用 |
| 容器 (Container) | 程序进程 | 镜像的运行实例,可写层,删除容器数据丢失(需挂载持久化) |
| 仓库 (Registry) | 应用商店 | 存放镜像的服务器,官方公共仓库:Docker Hub |
镜像分层示意:
┌──────────────────────┐
│ 可写容器层 (RW) │ ← 容器运行时新增/修改的数据
├──────────────────────┤
│ 第3层: COPY ./app │ ← 应用代码
├──────────────────────┤
│ 第2层: RUN pip install│ ← 依赖安装
├──────────────────────┤
│ 第1层: FROM python:3 │ ← 基础镜像层(只读)
└──────────────────────┘
容器生命周期:created → running → paused → stopped → deleted
容器 vs 镜像关系:
- 容器在镜像只读层之上添加一个可写容器层
- 采用**写时复制 (Copy-on-Write)**策略:修改文件时先将文件从只读层复制到可写层再修改
3. 底层隔离技术
| 技术 | 作用 |
|---|---|
| Namespace(命名空间) | 进程、网络、用户、挂载等资源隔离(PID、NET、IPC、MNT、UTS、USER) |
| Cgroups(控制组) | 限制容器 CPU、内存、磁盘 IO 资源 |
| Union FS(联合文件系统) | 镜像分层存储,复用底层层,节省空间。推荐 overlay2 驱动 |
二、Docker 安装与基础环境
1. 组件构成
| 组件 | 说明 |
|---|---|
| Docker Engine | 核心引擎 |
| Docker CLI | 命令行工具,日常操作入口 |
| Docker Daemon (dockerd) | 后台守护进程,接收 CLI 指令管理容器 |
| Docker Compose | 多容器编排(本地开发必用) |
| Docker Desktop | Windows/Mac 可视化桌面(内置 docker + compose) |
Docker 采用 Client-Server 架构:Docker Client 通过 REST API 与 Docker Daemon 通信。
2. Linux 安装
CentOS 7:
# 卸载旧版本
sudo yum remove docker docker-common docker-selinux docker-engine
# 安装依赖 & 添加 yum 源
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
Ubuntu:
sudo apt update
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker
3. 镜像加速(必配)
国内服务器配置镜像加速器,解决拉取镜像慢的问题。编辑 /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com",
"https://docker.m.daocloud.io"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启生效:
sudo systemctl daemon-reload && sudo systemctl restart docker
4. Compose V2 安装
sudo apt update
sudo apt install docker-compose-plugin -y
# 验证
docker compose version
注意: 新版 Compose V2(
docker compose,空格)是 Docker CLI 插件,Go 语言重写,速度快。旧版 V1(docker-compose,横杠)已废弃。
三、高频命令(分模块记忆,日常 90% 操作)
1. 镜像操作
# 拉取镜像
docker pull nginx
docker pull nginx:1.25-alpine # 指定版本
# 查看本地镜像
docker images
docker image ls -a # 包含中间层镜像
# 删除镜像
docker rmi 镜像ID/名称
docker image prune -a # 删除所有未使用的镜像
# 搜索镜像
docker search mysql
# 查看镜像详情
docker inspect nginx:latest # 完整 JSON 信息
docker history nginx:latest # 查看构建历史(每一层大小)
# 镜像打包导出/导入
docker save -o nginx.tar nginx
docker load -i nginx.tar
# 给镜像打标签
docker tag nginx:latest myrepo/nginx:v1.0
# 推送镜像到仓库
docker push myrepo/nginx:v1.0
# 根据容器生成新镜像
docker commit 容器ID 新镜像名:版本
镜像命名规范: [registry/][namespace/]name:tag
nginx:1.25-alpine— 官方镜像(省略 registry)myrepo.com/project/app:v2.0— 私有仓库镜像- ⚠️ 生产环境务必指定明确版本号,不要用
:latest
2. 容器操作(最常用)
docker run 常用参数速记
| 参数 | 说明 |
|---|---|
-d |
后台运行 |
--name |
指定容器名 |
-p 宿主机端口:容器端口 |
端口映射 |
-v |
数据挂载 |
--restart=always |
开机自启 |
-e |
设置环境变量 |
--network |
指定网络 |
--rm |
退出时自动删除 |
-m / --cpus |
内存/CPU 限制 |
重启策略:
| 策略 | 说明 |
|---|---|
no |
默认,不自动重启 |
always |
总是重启(Docker 启动时也会重启) |
on-failure[:N] |
仅非零退出码时重启,可指定最大重试次数 |
unless-stopped |
除手动停止外总是重启 |
常用命令:
# 创建并启动容器
docker run -d --name nginx-demo -p 8080:80 nginx
# 查看运行中容器
docker ps
# 查看所有容器(含停止)
docker ps -a
# 停止/启动/重启容器
docker stop/start/restart 容器名/ID
# 暂停/恢复
docker pause web
docker unpause web
# 删除容器(必须先停止)
docker rm 容器ID
docker rm -f 容器ID # 强制删除运行中容器
docker container prune # 删除所有已停止容器
# 进入容器终端
docker exec -it 容器ID /bin/sh # 推荐:开启新进程
docker attach 容器ID # 不推荐:连主进程
# 查看容器日志
docker logs -f 容器名
docker logs --tail 100 web # 最后100行
docker logs --since 30m web # 最近30分钟
# 拷贝文件 宿主机<->容器
docker cp 宿主机路径 容器ID:容器路径
docker cp 容器ID:/app/logs ./logs/
# 查看容器详情
docker inspect web # 完整 JSON
docker port web # 端口映射
docker top web # 容器内进程列表
# 实时资源监控
docker stats
docker stats --no-stream # 快照模式
3. 数据持久化(3 种挂载方式)
| 方式 | 特点 | 适用场景 |
|---|---|---|
| bind mount | 宿主机指定目录直接映射容器,-v /host/path:/container/path |
开发环境 |
| volume(推荐) | Docker 管理的独立目录,生命周期独立于容器,-v 卷名:/容器路径 |
生产环境 |
| tmpfs | 内存存储,容器销毁数据清空 | 临时敏感数据 |
对比两种 -v 写法:
-v /宿主机绝对路径:/容器路径→ bind mount 绑定挂载(开发本地代码)-v 数据卷名称:/容器路径→ docker volume 数据卷(生产持久存储推荐)
示例1:bind mount 绑定挂载
docker run -d --name nginx-web -p 8080:80 \
-v /home/dev/project:/usr/share/nginx/html \
--restart unless-stopped nginx
验证步骤:
- 给
/home/dev/project权限设为 777(根据实际情况调整) - 把写好的
index.html上传到这个文件夹 - 浏览器访问即可看到新页面(如看不到,Ctrl+F5 强制刷新,或进入容器检查内容是否传输过来)
示例2:Volume 数据卷(推荐,生产级)
一、Volume 是什么
Volume 是 Docker 自身管理的持久化存储目录,存放在宿主机 Docker 专属目录(Linux 默认:/var/lib/docker/volumes/),完全由 Docker 接管,生命周期独立于容器:
- 删除容器不会自动删除 Volume,数据永久保留
- 适合生产持久化(数据库、静态资源、日志)
与 Bind Mount 的核心区别:
| 维度 | Bind Mount | Volume(推荐) |
|---|---|---|
| 路径管理 | 手动指定宿主机任意目录 | Docker 统一管理,无需关心真实路径 |
| 权限兼容 | 依赖宿主机目录结构和权限 | 跨平台统一,权限兼容性更好 |
| 生命周期 | 与宿主机目录耦合 | 容器删除卷数据仍保留 |
| 适用场景 | 本地开发挂载代码 | 数据库、业务持久数据 |
二、Volume 基础命令
# 创建命名卷
docker volume create nginx-html
# 查看所有卷
docker volume ls
# 查看卷详细信息(真实宿主机路径)
docker volume inspect nginx-html
# 删除指定卷(无容器使用时才能删)
docker volume rm nginx-html
# 清理所有未使用的卷
docker volume prune
三、使用 Volume 启动 Nginx
docker run -d --name nginx-web -p 8080:80 \
-v nginx-html:/usr/share/nginx/html \
--restart unless-stopped nginx
-v 卷名:容器内路径:nginx-html 是 Docker 管理的数据卷,不写宿主机绝对路径。不用事先创建 nginx-html,直接运行命令即可。
四、往 Volume 里写入 index.html
方式1:临时容器复制文件进卷
docker run --rm \
-v /home/dev/project:/source \
-v nginx-html:/target \
alpine cp /source/index.html /target/
方式2:直接复制到卷的宿主机路径
# 先查看卷的真实路径
docker volume inspect nginx-html
# 然后将 index.html 复制到 /var/lib/docker/volumes/nginx-html/_data/
方式3:进入容器直接编辑
docker exec -it nginx-web bash
vi /usr/share/nginx/html/index.html
五、Volume 核心优势
- 解耦容器与宿主机目录,不用手动管理宿主机文件夹
- 容器删除,数据卷依然存在,新容器可直接复用数据
- 支持多容器共享同一个 Volume(多容器读写同一份数据)
- Docker 提供完整生命周期命令:创建、查看、清理、备份
- 镜像打包、迁移更友好,不受宿主机路径限制
六、问题排查
进入容器检查 /usr/share/nginx/html 下的 index.html 文件内容是否变更为我们创建的:
docker exec -it nginx-web bash
cat /usr/share/nginx/html/index.html
4. Docker 网络(4 种默认驱动)
| 驱动 | 说明 | 使用场景 |
|---|---|---|
| bridge | 默认,同一宿主机容器互通,外部需端口映射 | 单机容器通信 |
| host | 共享宿主机网络,无需 -p 端口映射,性能最好 |
高性能场景 |
| none | 无网络,仅 lo 接口 | 安全隔离场景 |
| overlay | 跨主机集群网络(Swarm),基于 VXLAN | 跨主机通信 |
| macvlan | 为容器分配物理 MAC 地址 | 需直接连接物理网络 |
| ipvlan | 类似 macvlan,共享 MAC 但不同 IP | MAC 地址受限环境 |
网络管理命令:
# 查看所有网络
docker network ls
# 创建自定义 bridge 网络
docker network create my-bridge
# 自定义网络(推荐替代默认 bridge,支持 DNS 容器名解析)
docker network create --driver bridge dev-net
# 启动容器时指定网络
docker run --network=host xxx
docker run --network=none xxx
docker run --network=my-bridge xxx
# 容器加入自定义网络,容器名直接互通
docker run --network dev-net --name mysql -p 3306:3306 mysql
docker run --network dev-net --name backend -p 8080:8080 my-server
# backend 容器内直接 ping mysql 就能连通
# 查看网络详情(含连接的容器 IP)
docker network inspect dev-net
# 将运行中容器连接到网络
docker network connect dev-net existing-container
# 断开网络
docker network disconnect dev-net container-name
# 删除网络
docker network rm dev-net
docker network prune # 删除所有未使用的网络
端口映射 -p 详解:
-p 8080:80 → 主机 8080 → 容器 80 (TCP)
-p 8080:80/udp → 仅 UDP
-p 0.0.0.0:8080:80 → 绑定所有网卡
-p 127.0.0.1:8080:80 → 仅本地访问
-p 8080-8090:80 → 主机 8080~8090 全部映射到 80
个人建议使用默认即可,如果需要优化建议使用自定义网络(也是基于 bridge 网络的)。
四、Dockerfile 镜像构建(核心,打包项目必备)
1. 常用指令(从上到下执行,分层缓存)
| 指令 | 作用 | 示例 |
|---|---|---|
FROM |
基础镜像(必须第一行) | FROM golang:1.21-alpine |
WORKDIR |
容器工作目录 | WORKDIR /app |
COPY |
复制宿主机文件到容器 | COPY ./app /app |
ADD |
同 COPY,支持自动解压压缩包 | ADD archive.tar.gz /app/ |
RUN |
构建镜像时执行命令(安装依赖) | RUN apt update && apt install -y curl |
ENV |
设置环境变量 | ENV APP_PORT=8080 |
ARG |
构建时的参数(--build-arg) |
ARG VERSION=1.0 |
EXPOSE |
声明容器暴露端口(仅文档,不自动映射) | EXPOSE 8080 |
CMD |
容器启动默认命令(可被 docker run 覆盖) |
CMD ["nginx", "-g", "daemon off;"] |
ENTRYPOINT |
固定启动程序,CMD 传参 | ENTRYPOINT ["/app/server"] |
VOLUME |
声明数据卷 | VOLUME /data |
USER |
指定运行用户(避免 root) | USER 1000:1000 |
HEALTHCHECK |
定义容器健康检查 | HEALTHCHECK CMD curl -f http://localhost/ || exit 1 |
SHELL |
指定 RUN/CMD 使用的 Shell | SHELL ["/bin/bash", "-c"] |
STOPSIGNAL |
指定停止信号 | STOPSIGNAL SIGTERM |
2. CMD vs ENTRYPOINT
| 组合 | 行为 |
|---|---|
| 仅 CMD | docker run image cmd 会覆盖 CMD |
| 仅 ENTRYPOINT | CMD 作为 ENTRYPOINT 的默认参数 |
| ENTRYPOINT + CMD | CMD 提供默认参数,docker run image arg 可替换 CMD 参数 |
3. 构建镜像命令
# 末尾 . 代表当前上下文目录
docker build -t my-web:v1 .
# 指定 Dockerfile 路径
docker build -f Dockerfile.prod -t myapp:prod .
# 构建时传参 + 不使用缓存
docker build --build-arg VERSION=2.0 --no-cache -t myapp:v2.0 .
4. 多阶段构建(瘦身镜像,生产规范)
分构建阶段 + 运行阶段,只保留运行依赖,丢弃编译工具,镜像体积大幅缩小。示例(Go 项目通用):
# ========== 构建阶段 ==========
FROM golang:1.25-alpine AS builder
WORKDIR /build
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o /app/server .
# ========== 运行阶段 ==========
FROM alpine:3.21
WORKDIR /app
COPY --from=builder /app/server .
COPY --from=builder /build/templates ./templates
EXPOSE 8080
CMD ["/app/server"]
5. Dockerfile 编写最佳实践
- 使用官方基础镜像:优先选择
alpine变体,镜像更小更安全 - 合并 RUN 指令:用
&&连接命令减少层数,在同层清理缓存 - COPY 优于 ADD:除非需要远程 URL 或自动解压,否则用 COPY
- 利用构建缓存:先 COPY 依赖文件(如
package.json/go.mod)再 RUN install,最后 COPY 代码 - 非 root 运行:创建专用用户
USER appuser,增强安全性 - 使用 .dockerignore:排除
.git、node_modules、日志等无关文件,加速构建 - 多阶段构建:编译与运行分离,最终镜像仅包含必要产物
- 必须设置 HEALTHCHECK:便于编排系统判断容器健康状态
6. .dockerignore 模板
.git
.gitignore
node_modules
*.log
Dockerfile
docker-compose.yml
.vscode
.idea
*.md
Makefile
五、Docker Compose 多容器编排(本地开发神器)
1. 作用
单个 YAML 文件管理多个关联容器(如前端 + 后端 + MySQL + Redis),一键启停,不用手写一堆 docker run 参数。
2. 核心文件 docker-compose.yml
三层结构:services、volumes、networks
version: "3.8"
services:
# ---- 前端 ----
frontend:
build: ./frontend
image: myapp-frontend:latest
ports:
- "80:80"
depends_on:
- backend
networks:
- app-net
restart: unless-stopped
# ---- 后端 API ----
backend:
build: ./backend
image: myapp-backend:latest
ports:
- "3000:3000"
environment:
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=appuser
- DB_PASSWORD=${DB_PASSWORD}
env_file:
- ./backend/.env
volumes:
- ./backend/uploads:/app/uploads
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_started
networks:
- app-net
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
restart: unless-stopped
deploy:
resources:
limits:
cpus: '2'
memory: 512M
# ---- 数据库 ----
postgres:
image: postgres:16-alpine
environment:
POSTGRES_DB: myapp
POSTGRES_USER: appuser
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- postgres-data:/var/lib/postgresql/data
- ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
networks:
- app-net
healthcheck:
test: ["CMD-SHELL", "pg_isready -U appuser -d myapp"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
# ---- 缓存 ----
redis:
image: redis:7-alpine
command: redis-server --requirepass ${REDIS_PASSWORD} --maxmemory 256mb
volumes:
- redis-data:/data
networks:
- app-net
restart: unless-stopped
# ---- 网络 ----
networks:
app-net:
driver: bridge
# ---- 数据卷 ----
volumes:
postgres-data:
redis-data:
3. 常用 compose 命令
# 启动所有服务(后台)
docker compose up -d
# 指定 compose 文件
docker compose -f docker-compose.prod.yml up -d
# 重新构建并启动
docker compose up -d --build
# 查看运行状态
docker compose ps
# 查看日志
docker compose logs -f
docker compose logs -f --tail 50 backend
# 进入服务容器
docker compose exec backend /bin/sh
# 运行一次性命令
docker compose run --rm backend python manage.py migrate
# 停止并删除容器(保留数据卷)
docker compose down
# 停止并删除容器 + 数据卷
docker compose down -v
# 同时删除镜像
docker compose down --rmi all
# 重启单个服务
docker compose restart backend
# 水平扩容
docker compose up -d --scale worker=3
4. .env 文件示例
# .env(与 docker-compose.yml 同目录自动加载)
TAG=v1.2.3
DB_PASSWORD=ChangeMe123!
REDIS_PASSWORD=RedisSecret456
Compose 适用场景: 本地开发环境搭建、单机多服务部署、CI/CD 测试环境。大规模生产集群推荐使用 Kubernetes。
六、镜像仓库分发
| 仓库 | 说明 |
|---|---|
| Docker Hub | 公有仓库,官方公共镜像 |
| Registry | 简易私有库 |
| Harbor | 企业级(带权限、UI、镜像扫描) |
# 登录/登出
docker login
docker logout
# 镜像打标签(推送私有库规范)
docker tag my-web:v1 192.168.1.100/library/my-web:v1
# 推送
docker push 192.168.1.100/library/my-web:v1
# 搭建私有仓库 (Registry)
docker run -d -p 5000:5000 --restart=always --name registry \
-v /data/registry:/var/lib/registry registry:2
# 推送到私有仓库
docker tag myapp:v1.0 localhost:5000/myapp:v1.0
docker push localhost:5000/myapp:v1.0
Harbor 企业级功能:
- 镜像漏洞扫描 (Trivy/Clair)
- RBAC 权限管理和 LDAP 集成
- 镜像复制与同步(跨数据中心)
- 镜像签名与内容信任
- Helm Chart 仓库
- 垃圾回收与配额管理
七、生产最佳实践
- 镜像轻量化:使用
alpine极简基础镜像、多阶段构建、清理缓存- 选最小基础镜像:
alpine(~7MB) 或scratch(空镜像) - 清理包管理器缓存:
apt clean && rm -rf /var/lib/apt/lists/* - 使用
docker image prune定期清理无用镜像
- 选最小基础镜像:
- 数据持久化:所有业务数据必须挂载 volume,禁止容器内存储
- 资源限制:
docker run时增加--memory、--cpus防止容器占满宿主机资源 - 安全:
- 容器非 root 用户运行(Dockerfile 中使用
USER指令) - 使用
--read-only只读根文件系统 - 不要映射高危端口,私有仓库开启认证
- 固定镜像版本:使用具体 tag,避免
:latest - 敏感信息用 Docker Secrets(Swarm)或外部 KMS,不要写死在镜像或环境变量
- 镜像扫描:使用
docker scout、Trivy 或 Harbor 扫描漏洞 - ⚠️ 常见隐患:以 root 运行容器、挂载
/var/run/docker.sock到容器、暴露未加密端口
- 容器非 root 用户运行(Dockerfile 中使用
- 自启动:容器配置
--restart=always,服务器重启自动拉起 - 日志统一:挂载宿主机日志目录,对接 ELK 收集日志
- 磁盘管理:定期
docker system prune -a --volumes一键清理
八、Docker 与 K8s 区别(分清定位)
| 维度 | Docker | Kubernetes (K8s) |
|---|---|---|
| 定位 | 单机容器打包、运行工具 | 容器集群编排平台 |
| 规模 | 适合本地开发、单机部署 | 管理成千上万容器 |
| 核心能力 | 镜像构建、容器运行 | 扩缩容、自愈、负载均衡、服务发现、滚动更新 |
| 关系 | K8s 底层默认使用 Docker 运行容器(新版支持 containerd 替代) | — |
学习路线: Docker 是基础,K8s 是进阶。掌握 Docker 后主要学习 K8s。
Docker Swarm(内置集群编排,备选方案)
# 初始化 Swarm 集群
docker swarm init --advertise-addr 192.168.1.100
# 部署服务栈
docker stack deploy -c docker-compose.yml myapp
# 查看服务
docker service ls
docker service ps myapp_frontend
# 滚动更新
docker service update --image myapp:v2.0 myapp_frontend
九、学习路线(快速上手顺序)
- ✅ 理解镜像 / 容器 / 仓库基础概念
- ✅ 练熟
docker run、ps、exec、logs、volume基础命令 - ✅ 手写 Dockerfile 打包自己项目(前端 / Java / Go 任选)
- ✅ 学习 Docker Compose 搭建多服务开发环境
- ✅ 掌握私有仓库 Harbor 镜像推送
- ⏭ 进阶:容器网络、资源限制、生产优化、K8s 衔接
附加:常用命令速查表
镜像 (Image)
| 命令 | 说明 |
|---|---|
docker images |
列出本地镜像 |
docker pull <image> |
拉取镜像 |
docker rmi <image> |
删除镜像 |
docker tag src target |
打标签 |
docker build -t name . |
构建镜像 |
docker push <image> |
推送镜像 |
docker history <image> |
查看构建历史 |
docker save/load |
导出/导入镜像 |
docker image prune -a |
清理无用镜像 |
容器 (Container)
| 命令 | 说明 |
|---|---|
docker ps -a |
列出所有容器 |
docker run -d --name n -p 80:80 img |
启动容器 |
docker start/stop/restart n |
启/停/重启 |
docker exec -it n /bin/sh |
进入容器 |
docker logs -f n |
查看日志 |
docker rm n |
删除容器 |
docker inspect n |
查看详情 |
docker stats |
资源监控 |
docker cp file n:/path |
拷贝文件 |
docker port n |
查看端口映射 |
Compose
| 命令 | 说明 |
|---|---|
docker compose up -d |
后台启动 |
docker compose ps |
查看状态 |
docker compose logs -f |
查看日志 |
docker compose exec srv sh |
进入服务容器 |
docker compose down -v |
停止并删除卷 |
docker compose restart srv |
重启服务 |
docker compose build |
构建镜像 |
docker compose run srv cmd |
运行一次性命令 |
系统
| 命令 | 说明 |
|---|---|
docker version |
查看版本 |
docker info |
系统信息 |
docker system df |
磁盘占用 |
docker system prune -a |
全面清理 |
docker events |
实时事件 |
docker login/logout |
仓库登录/登出 |
日志与调试
| 命令 | 说明 |
|---|---|
docker logs --tail 100 --timestamps web |
日志带时间戳 |
docker stats --no-stream |
资源快照 |
docker top web |
容器进程列表 |
docker diff web |
容器文件变更 (A=新增 D=删除 C=修改) |
docker events --filter container=web1 |
容器事件流 |
journalctl -u docker -f |
Docker 守护进程日志 |
推荐学习资源
- Docker 官方文档:https://docs.docker.com
- Docker Hub:https://hub.docker.com
- Play with Docker(在线实验环境):https://labs.play-with-docker.com
- Docker 从入门到实践(中文):Docker 从入门到实践
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)