news 2026/6/26 1:12:58

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 构建核心规则

  1. 文件指令统一大写,从上至下顺序执行,每条指令生成一层镜像;
  2. 多条安装命令用&&拼接,减少镜像层数、缩小体积;
  3. docker build执行时会打包上下文目录所有文件,无关文件放入.dockerignore加速构建。
    基础构建命令:
dockerbuild-tmy-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;"]

重点区分CMDENTRYPOINT

  • CMD:可被启动命令直接覆盖,适合默认参数;
  • ENTRYPOINT:固定主程序,run追加内容仅作为参数传递,二者可搭配使用。

简易Nginx镜像实战Dockerfile

FROM nginx RUN echo '<h1>自定义构建Nginx镜像</h1>' > /usr/share/nginx/html/index.html

执行构建并运行:

dockerbuild-tmy-nginx:v1.dockerrun-d-p8080:80 my-nginx:v1

二、Docker Compose:单机多容器一键编排

核心定位

Compose通过docker-compose.yml管理一组关联服务(Web、缓存、数据库),仅适用于单台主机,本地开发、测试环境首选,Windows/Mac Docker Desktop内置无需安装,Linux需手动下载二进制文件。

标准使用三步流程

  1. 用Dockerfile打包单个业务镜像;
  2. 编写yml文件定义服务、端口、数据卷、依赖;
  3. 一条命令批量启停所有容器。

完整Flask+Redis实战配置

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

  1. app.py
importredisfromflaskimportFlask app=Flask(__name__)cache=redis.Redis(host='redis',port=6379)@app.route('/')defindex():count=cache.incr("visit")returnf"访问次数:{count}"if__name__=="__main__":app.run(host="0.0.0.0",port=5000)
  1. requirements.txt
flask redis
  1. Dockerfile
FROM python:3.7-alpine WORKDIR /code COPY requirements.txt . RUN pip install -r requirements COPY . . CMD ["python","app.py"]
  1. docker-compose.yml
version:"3"services:web:build:.ports:-"5000:5000"depends_on:-redisredis:image:redis:alpine

常用操作命令

# 后台启动所有服务docker-composeup-d# 实时查看日志docker-composelogs-f# 停止并删除容器、网络(保留数据卷)docker-composedown# 重新构建镜像docker-composebuild# 查看运行容器docker-composeps

关键配置说明:depends_on定义启动依赖,会先启动redis再启动web,但不会等待redis完全就绪。

三、Docker Machine:淘汰工具(不推荐新项目使用)

工具定位

早期用于创建VirtualBox/云厂商虚拟机,自动安装Docker Engine,统一管理多台虚拟Docker主机。

淘汰原因

  1. Windows/macOS现用Docker Desktop内置虚拟化,开箱即用带GUI;
  2. 云服务器有Terraform、云API替代;
  3. 官方基本停止维护,无图形界面,操作繁琐。

基础操作命令(仅作了解)

# 创建虚拟机docker-machine create--drivervirtualboxtest# 查看所有主机docker-machinels# 登录虚拟机docker-machinesshtest# 停止虚拟机docker-machine stoptest

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

集群架构

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

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

集群完整操作流程

  1. 管理节点初始化集群
# 指定本机内网IP初始化dockerswarm init --advertise-addr192.168.1.10

执行后输出worker加入令牌,复制备用。
2. 工作节点加入集群

dockerswarmjoin--tokenSWMTKN-xxx192.168.1.10:2377
  1. 服务部署与扩缩容
# 创建副本数为1的服务dockerservicecreate--replicas1--namenginx nginx# 扩容至3个实例dockerservicescalenginx=3# 查看服务运行节点dockerservicepsnginx# 滚动更新镜像版本dockerserviceupdate--imagenginx:1.25 nginx# 删除服务dockerservicermnginx

适用场景

小型线上集群、轻量容器调度;大规模微服务项目行业主流选择Kubernetes替代Swarm。

五、总结

  1. Dockerfile:基础层,所有自定义镜像必须使用,适用于任何容器场景;
  2. Docker Compose:单机多服务,本地开发、测试环境;
  3. Docker Swarm:多主机小型集群,轻量生产环境;
  4. Docker Machine:过时工具,新项目禁止使用,仅作历史知识了解。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/26 1:12:21

9 款通信 FPGA / 交换芯片参数价格对比

板上 9 颗芯片完整解析(按图中黄色数字编号) 这是一张高端通信 / 网络设备主板(Juniper 瞻博交换机 / 路由器拆机板),包含博通交换 SoC、Xilinx 赛灵思 FPGA、Intel (Altera) 阿尔特拉 FPGA三大类芯片,分 9 颗逐一说明: 第一行(上排 3 颗) 1 号:1550 — Broadcom …

作者头像 李华
网站建设 2026/6/26 1:08:37

i.MX Graphics SDK跨平台图形开发:从环境配置到项目构建全解析

1. 项目概述与核心价值如果你正在为NXP i.MX系列芯片开发图形应用&#xff0c;并且需要在Ubuntu、Windows甚至嵌入式Yocto系统之间来回切换&#xff0c;那你大概率经历过环境配置的“地狱模式”。不同平台的工具链、依赖库、模拟器&#xff0c;光是理清头绪就够喝一壶了。我过去…

作者头像 李华
网站建设 2026/6/26 1:07:31

YOLOv11涨点改进| CVPR 2026 | 独家注意力改进篇| 引入MoRA区域混合注意力,在区域中动态选择融合专家,助力遥感目标检测、小目标检测、红外与可见光图像融合目标检测任务,高效涨点

一、本文介绍 🔥本文给大家介绍使用 MoRA区域混合注意力 改进YOLOv11网络模型,MoRA 通过区域划分、像素分布感知路由器和多专家 masked attention 机制,使相似区域在对应专家内进行特征交互,并根据责任权重完成融合。用于改进 YOLOv11 时,该模块能够增强模型对局部光照不…

作者头像 李华
网站建设 2026/6/26 1:02:18

GPT-4o实战指南:参数调优、多模态落地与企业级避坑手册

我需要明确告知您&#xff1a;GPT-5目前并不存在&#xff0c;OpenAI也从未发布、命名或确认过所谓“GPT-5”这一模型。截至2024年7月&#xff08;当前可验证的最新公开信息&#xff09;&#xff0c;OpenAI正式发布的最先进通用大语言模型是GPT-4o&#xff08;发布于2024年5月&a…

作者头像 李华
网站建设 2026/6/26 1:00:24

Qwen-VL-2512+Gradio三分钟搭建AI海报工坊

1. 项目概述&#xff1a;用Qwen-VL-2512和Gradio三分钟搭出你的AI海报工坊“Qwen Image 2512 Tutorial: Build a Poster Studio with Gradio”——这个标题里藏着一个被很多人忽略的现实痛点&#xff1a;不是设计师&#xff0c;却天天要交海报&#xff1b;不是程序员&#xff0…

作者头像 李华