注:对于经常用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
总结:整体大致就是这些,具体的其实一般会直接给的,一些项目。