欢迎光临
我们一直在努力

Docker第3天:Dockerfile、Compose、Swarm、Machine学习整理

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执行时会打包上下文目录所有文件,无关文件放入.dockerignore加速构建。 基础构建命令:
  • 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需手动下载二进制文件。

    标准使用三步流程

  • 用Dockerfile打包单个业务镜像;
  • 编写yml文件定义服务、端口、数据卷、依赖;
  • 一条命令批量启停所有容器。
  • 完整Flask+Redis实战配置

    项目目录文件:app.py、requirements.txt、Dockerfile、docker-compose.yml

  • app.py
  • 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)

  • requirements.txt
  • flask
    redis

  • Dockerfile
  • FROM python:3.7-alpine
    WORKDIR /code
    COPY requirements.txt .
    RUN pip install -r requirements
    COPY . .
    CMD ["python","app.py"]

  • docker-compose.yml
  • 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主机。

    淘汰原因

  • Windows/macOS现用Docker Desktop内置虚拟化,开箱即用带GUI;
  • 云服务器有Terraform、云API替代;
  • 官方基本停止维护,无图形界面,操作繁琐。
  • 基础操作命令(仅作了解)

    # 创建虚拟机
    docker-machine create –driver virtualbox test
    # 查看所有主机
    docker-machine ls
    # 登录虚拟机
    docker-machine ssh test
    # 停止虚拟机
    docker-machine stop test

    四、Docker Swarm:官方原生多主机集群

    集群架构

    Swarm内嵌于Docker Engine,无需额外安装,集群分为两类节点:

  • Manager管理节点:集群调度、配置存储,支持多主高可用;
  • Worker工作节点:仅运行业务容器,不参与集群管理。
  • 集群完整操作流程

  • 管理节点初始化集群
  • # 指定本机内网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。

    五、总结

  • Dockerfile:基础层,所有自定义镜像必须使用,适用于任何容器场景;
  • Docker Compose:单机多服务,本地开发、测试环境;
  • Docker Swarm:多主机小型集群,轻量生产环境;
  • Docker Machine:过时工具,新项目禁止使用,仅作历史知识了解。
  • 赞(0)
    未经允许不得转载:171主机测评 » Docker第3天:Dockerfile、Compose、Swarm、Machine学习整理
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址