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

📅 2026/6/26 1:13:12
Docker第3天:Dockerfile、Compose、Swarm、Machine学习整理
Docker三件套Dockerfile、Compose、Swarm及淘汰工具Machine完整学习笔记前言一、Dockerfile自定义镜像标准构建脚本1 构建核心规则2 高频指令详解简易Nginx镜像实战Dockerfile二、Docker Compose单机多容器一键编排核心定位标准使用三步流程完整FlaskRedis实战配置常用操作命令三、Docker Machine淘汰工具不推荐新项目使用工具定位淘汰原因基础操作命令仅作了解四、Docker Swarm官方原生多主机集群集群架构集群完整操作流程适用场景五、总结前言学习完镜像、容器基础操作后日常开发与集群部署离不开三套核心工具Dockerfile自定义镜像、Docker Compose单机多服务编排、Docker Swarm多主机集群。一、Dockerfile自定义镜像标准构建脚本Dockerfile是纯文本构建文件通过一系列指令定义镜像分层结构替代手动docker commit提交容器的低效方式是标准化打包的核心手段。1 构建核心规则文件指令统一大写从上至下顺序执行每条指令生成一层镜像多条安装命令用拼接减少镜像层数、缩小体积docker build执行时会打包上下文目录所有文件无关文件放入.dockerignore加速构建。基础构建命令dockerbuild-tmy-nginx:v1.末尾.代表构建上下文路径。2 高频指令详解# FROM必须为首行指定基础镜像 FROM nginx:alpine # LABEL替代废弃MAINTAINER写入镜像元数据 LABEL authortest123.com # 工作目录自动创建后续命令默认在此执行 WORKDIR /usr/share/nginx/html # RUN构建阶段执行命令shell格式 RUN echo 自定义页面 index.html # COPY仅复制本地文件优先使用ADD可自动解压tar包 COPY ./local.html ./index.html # 永久环境变量容器运行可读取 ENV WEB_PORT80 # 声明容器监听端口仅文档标注不会自动映射 EXPOSE 80/tcp # 容器启动默认命令docker run传参可覆盖 CMD [nginx,-g,daemon off;]重点区分CMD与ENTRYPOINTCMD可被启动命令直接覆盖适合默认参数ENTRYPOINT固定主程序run追加内容仅作为参数传递二者可搭配使用。简易Nginx镜像实战DockerfileFROM 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需手动下载二进制文件。标准使用三步流程用Dockerfile打包单个业务镜像编写yml文件定义服务、端口、数据卷、依赖一条命令批量启停所有容器。完整FlaskRedis实战配置项目目录文件app.py、requirements.txt、Dockerfile、docker-compose.ymlapp.pyimportredisfromflaskimportFlask appFlask(__name__)cacheredis.Redis(hostredis,port6379)app.route(/)defindex():countcache.incr(visit)returnf访问次数{count}if__name____main__:app.run(host0.0.0.0,port5000)requirements.txtflask redisDockerfileFROM python:3.7-alpine WORKDIR /code COPY requirements.txt . RUN pip install -r requirements COPY . . CMD [python,app.py]docker-compose.ymlversion:3services:web:build:.ports:-5000:5000depends_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主机。淘汰原因Windows/macOS现用Docker Desktop内置虚拟化开箱即用带GUI云服务器有Terraform、云API替代官方基本停止维护无图形界面操作繁琐。基础操作命令仅作了解# 创建虚拟机docker-machine create--drivervirtualboxtest# 查看所有主机docker-machinels# 登录虚拟机docker-machinesshtest# 停止虚拟机docker-machine stoptest四、Docker Swarm官方原生多主机集群集群架构Swarm内嵌于Docker Engine无需额外安装集群分为两类节点Manager管理节点集群调度、配置存储支持多主高可用Worker工作节点仅运行业务容器不参与集群管理。集群完整操作流程管理节点初始化集群# 指定本机内网IP初始化dockerswarm init --advertise-addr192.168.1.10执行后输出worker加入令牌复制备用。2. 工作节点加入集群dockerswarmjoin--tokenSWMTKN-xxx192.168.1.10:2377服务部署与扩缩容# 创建副本数为1的服务dockerservicecreate--replicas1--namenginx nginx# 扩容至3个实例dockerservicescalenginx3# 查看服务运行节点dockerservicepsnginx# 滚动更新镜像版本dockerserviceupdate--imagenginx:1.25 nginx# 删除服务dockerservicermnginx适用场景小型线上集群、轻量容器调度大规模微服务项目行业主流选择Kubernetes替代Swarm。五、总结Dockerfile基础层所有自定义镜像必须使用适用于任何容器场景Docker Compose单机多服务本地开发、测试环境Docker Swarm多主机小型集群轻量生产环境Docker Machine过时工具新项目禁止使用仅作历史知识了解。