Docker三件套:Dockerfile、Compose、Swarm及淘汰工具Machine完整学习笔记
-
- 前言
- 一、Dockerfile:自定义镜像标准构建脚本
-
- 1 构建核心规则
- 2 高频指令详解
- 简易Nginx镜像实战Dockerfile
- 二、Docker Compose:单机多容器一键编排
-
- 核心定位
- 标准使用三步流程
- 完整Flask+Redis实战配置
- 常用操作命令
- 三、Docker Machine:淘汰工具(不推荐新项目使用)
-
- 工具定位
- 淘汰原因
- 基础操作命令(仅作了解)
- 四、Docker Swarm:官方原生多主机集群
-
- 集群架构
- 集群完整操作流程
- 适用场景
- 五、总结
前言
学习完镜像、容器基础操作后,日常开发与集群部署离不开三套核心工具:Dockerfile自定义镜像、Docker Compose单机多服务编排、Docker Swarm多主机集群。
一、Dockerfile:自定义镜像标准构建脚本
Dockerfile是纯文本构建文件,通过一系列指令定义镜像分层结构,替代手动docker commit提交容器的低效方式,是标准化打包的核心手段。
1 构建核心规则
docker build -t my-nginx:v1 .
末尾.代表构建上下文路径。
2 高频指令详解
# FROM必须为首行,指定基础镜像
FROM nginx:alpine
# LABEL替代废弃MAINTAINER,写入镜像元数据
LABEL author="test@123.com"
# 工作目录,自动创建,后续命令默认在此执行
WORKDIR /usr/share/nginx/html
# RUN构建阶段执行命令,shell格式
RUN echo "自定义页面" > index.html
# COPY仅复制本地文件,优先使用;ADD可自动解压tar包
COPY ./local.html ./index.html
# 永久环境变量,容器运行可读取
ENV WEB_PORT=80
# 声明容器监听端口,仅文档标注,不会自动映射
EXPOSE 80/tcp
# 容器启动默认命令,docker run传参可覆盖
CMD ["nginx","-g","daemon off;"]
重点区分CMD与ENTRYPOINT:
- CMD:可被启动命令直接覆盖,适合默认参数;
- ENTRYPOINT:固定主程序,run追加内容仅作为参数传递,二者可搭配使用。
简易Nginx镜像实战Dockerfile
FROM nginx
RUN echo '<h1>自定义构建Nginx镜像</h1>' > /usr/share/nginx/html/index.html
执行构建并运行:
docker build -t my-nginx:v1 .
docker run -d -p 8080:80 my-nginx:v1
二、Docker Compose:单机多容器一键编排
核心定位
Compose通过docker-compose.yml管理一组关联服务(Web、缓存、数据库),仅适用于单台主机,本地开发、测试环境首选,Windows/Mac Docker Desktop内置无需安装,Linux需手动下载二进制文件。
标准使用三步流程
完整Flask+Redis实战配置
项目目录文件:app.py、requirements.txt、Dockerfile、docker-compose.yml
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
@app.route('/')
def index():
count = cache.incr("visit")
return f"访问次数:{count}"
if __name__ == "__main__":
app.run(host="0.0.0.0",port=5000)
flask
redis
FROM python:3.7-alpine
WORKDIR /code
COPY requirements.txt .
RUN pip install -r requirements
COPY . .
CMD ["python","app.py"]
version: "3"
services:
web:
build: .
ports:
– "5000:5000"
depends_on:
– redis
redis:
image: redis:alpine
常用操作命令
# 后台启动所有服务
docker-compose up -d
# 实时查看日志
docker-compose logs -f
# 停止并删除容器、网络(保留数据卷)
docker-compose down
# 重新构建镜像
docker-compose build
# 查看运行容器
docker-compose ps
关键配置说明:depends_on定义启动依赖,会先启动redis再启动web,但不会等待redis完全就绪。
三、Docker Machine:淘汰工具(不推荐新项目使用)
工具定位
早期用于创建VirtualBox/云厂商虚拟机,自动安装Docker Engine,统一管理多台虚拟Docker主机。
淘汰原因
基础操作命令(仅作了解)
# 创建虚拟机
docker-machine create –driver virtualbox test
# 查看所有主机
docker-machine ls
# 登录虚拟机
docker-machine ssh test
# 停止虚拟机
docker-machine stop test
四、Docker Swarm:官方原生多主机集群
集群架构
Swarm内嵌于Docker Engine,无需额外安装,集群分为两类节点:
集群完整操作流程
# 指定本机内网IP初始化
docker swarm init –advertise-addr 192.168.1.10
执行后输出worker加入令牌,复制备用。 2. 工作节点加入集群
docker swarm join –token SWMTKN-xxx 192.168.1.10:2377
# 创建副本数为1的服务
docker service create –replicas 1 –name nginx nginx
# 扩容至3个实例
docker service scale nginx=3
# 查看服务运行节点
docker service ps nginx
# 滚动更新镜像版本
docker service update –image nginx:1.25 nginx
# 删除服务
docker service rm nginx
适用场景
小型线上集群、轻量容器调度;大规模微服务项目行业主流选择Kubernetes替代Swarm。



