compose语法 – 苏的小站

成功 用自己的方式度过一生

个人作品展示

苏的小站 · 科技爱好者

爱好者

面试作品 简历展示、项目简介、技术栈
风格 现代、简约

compose语法

注:对于经常用docker的人来说肯定绕不开这个,本文主要介绍compose方便别人看懂

Docker Compose 语法是 Docker 官方统一标准,全世界一模一样
唯一区别:本地文件夹路径不一样,其他全部照搬能用,反正就通用。

一、什么是 Docker Compose

单个 Docker 用命令行敲参数,麻烦、难记忆、容易丢配置

Compose 就是用一个  docker-compose.yml  文件,把镜像、端口、挂载、开机自启、环境变量全部写好

我们直接就可以配置好。

二、必须记住的2个硬性规则

文件名固定

docker-compose.yml
 

不能乱改大小写、不能改名字。

    只用空格缩进,绝对不能用 Tab 制表符
    冒号  :  后面必须加一个空格
    层级靠缩进控制,缩进统一用 2空格 或 4空格,全篇统一
    #  后面是注释,不生效,只给自己看

    三、通用标准完整模板(全世界通用骨架)

    这是万能通用壳子,以后装任何软件,都在这个骨架上改几个参数就行,结构不用动。

    yaml

    Compose 版本,3.8 兼容性最强,所有设备通用

    version: ‘3.8’

    所有容器都写在 services 下面

    services:
    # 【服务名】自定义,只能英文数字下划线,无中文无空格
    app:
    # 镜像地址:软件的源头
    image: 镜像名称:版本

    # 自定义容器名字,方便自己识别
    container_name: 自定义容器名
    
    # 重启策略: always 开机自启、崩溃自动重启
    restart: always
    
    # 网络模式:99%场景用 bridge 默认即可,不用改
    network_mode: bridge
    
    # 端口映射  格式:宿主机端口:容器内部端口
    ports:
      - "8080:80"
    
    # 目录挂载/数据持久化  格式:本地路径:容器内路径
    volumes:
      - /本地绝对路径:/容器内路径
    
    # 环境变量
    environment:
      - TZ=Asia/Shanghai   # 统一亚洲上海时区,必加
      - 自定义变量1=值1
      - 自定义变量2=值2
    
    # 特权权限,大部分软件不用开,特殊容器再改成 true
    privileged: false

    网络默认配置,不用改,保留即可

    networks:
    default:
    driver: bridge
     

    重点:整个结构永远不用变,只改 image、端口、挂载路径、环境变量 这几处就行

    四、逐行超详细讲解(看懂就会自己写)

    version

      yaml

      version: ‘3.8’
       

      services

        固定关键字,所有容器服务都必须放在这一行下面,不能改、不能删。

        服务名

        app:
         

        • 自己随便起名: web 、 mysql 、 gbox 、 ql  都行
        • 规则:只能英文、数字、下划线,禁止中文、空格、特殊符号

        image 镜像

        image: nginx:latest
         

        软件的镜像地址,别人给的 compose 主要就是给这个

        格式: 镜像名:标签 

        不要乱用  latest  最新版,容易自动升级崩服务,尽量指定版本

        container_name 容器名

          container_name: my-nginx
           

          • 给容器起一个好记的名字
          • 不写会自动随机生成一串字符,不方便管理

          restart 重启策略

            四个可选值,通用只记一个:

            restart: always
             

             always :Docker 开机就自动启动,容器挂了自动重启 (家用NAS首选)

             unless-stopped :除非手动停止,否则一直启

            on-failure :只在异常崩溃时重启

            no :不自动重启

            network_mode 网络模式

              network_mode: bridge
               

               bridge :默认隔离网络,最常用,99%软件都用这个

               host :和宿主机共用网卡,不用映射端口,适合特殊服务

              新手一律用  bridge  就行

              ports 端口映射

              ports:

              “8080:80”
               格式:宿主机端口 : 容器内部端口

              前面:你自己访问用的端口,随便改,别和别的软件冲突

              后面:软件容器固定端口,不能乱改

              要开多个端口就多加一行

              示例:

              ports:

              • “8080:80”
              • “2222:22”
                 

              volumes 目录挂载(最重要)

              volumes:

              • /vol2/docker/nginx/config:/etc/nginx
              • /vol2/docker/nginx/html:/usr/share/nginx/html
                 

              作用

              • 把容器里面的配置、数据、日志,挂载到 NAS/服务器 本地文件夹
              • 删了容器,数据还在,不会丢
                格式:本地绝对路径 : 容器内路径

              同一份 compose,只改左边本地路径,直接通用。

              environment 环境变量

              environment:

              • TZ=Asia/Shanghai
              • USER=admin
              • PASSWORD=123456
                 
              •  TZ=Asia/Shanghai  必加,解决时间时差、日志时间不对
              • 其他变量是每个软件自己的账号、密码、配置参数,按软件要求填

              privileged 特权模式

              privileged: false
               

              • 普通软件:false
              • 需要硬件权限、挂载磁盘、特殊内核权限的容器:改成 true

              六、通用部署使用方法

              命令行方式

                进入yml所在目录,执行:

                后台启动

                docker-compose up -d

                查看日志

                docker-compose logs -f

                停止容器

                docker-compose down

                重启

                docker-compose restart


                 一个万能模板

                services:
                app:
                image: 镜像名:版本
                container_name: 容器名
                restart: always
                network_mode: bridge
                privileged: false
                ports:
                – “主机端口:容器端口”
                environment:
                – TZ=Asia/Shanghai
                volumes:
                – /宿主机路径:/容器内路径

                networks:
                default:
                driver: bridge

                总结:整体大致就是这些,具体的其实一般会直接给的,一些项目。

                

                发表评论

                您的邮箱地址不会被公开。 必填项已用 * 标注