Docker-compose 单机容器集群编排工具
DOCKER-COMPOSE
简介#
Docker Compose是一个用于定义和运行多容器 Docker 应用程序的工具。它允许用户使用 YAML 文件来定义应用程序的配置,包括容器的数量、容器之间的依赖关系、环境变量、端口映射以及其他设置。然后,用户可以使用 docker-compose 命令来启动和管理这些容器。
使用 Docker Compose 可以方便地管理多个容器,例如,可以同时启动一个 Web 服务器容器和一个数据库容器,并在它们之间建立网络连接。Docker Compose 还支持自定义网络,使得容器可以在不同的网络中进行通信。
Docker Compose 文件通常包含一个或多个服务,每个服务都由一个或多个容器组成。服务定义了容器应该执行的任务,以及容器之间的依赖关系。例如,一个 Web 服务器服务可以包含一个或多个 Web 服务器容器,而这些容器又依赖于一个数据库容器
传统的容器管理:DOckerfilie文件--> 手动执行 docker build 一个个镜像的构建 --> 手动执行 通过docker run 创建启动一个个容器 编排管理容器 : dockerfile文件 --> 在docker compose 配置文件里定义好容器启动参数和依赖关系 --> 执行docker-compose 命令指定配置文件 一次性的自动完成所有镜像和容器创建启动 #docker-compose 是什么? docker-compose 是一个可以实现在单机上对容器集群编排管理的工具。使用python开发的,能运行docker的平台也能够用docker-compose编排管理容器 本质就是在yaml格式的docker-compose 配置模板文件里定义多个服务器的启动参数和 依赖关系,并使用docker-compose命令根据指定配置模板文件的配置来启动和管理容器 #docker-compose的三大概念 项目project -> 包含一个或多个服务service -> 包含一个或多个容器container的镜像、端口映射、环境变量、依赖关系等启动参数 项目:默认使用项目的目录名作为project的项目名,也支持使用-p 或 --project-name 来指定项目名称 项目目录里要包含一个docker-compose.yml 配置模板文件,默认为docker-compose.yml,可以支持-f 或 --file 来指定项目的配置模板文件 在配置模板文件里要包含一个或多个服务器的配置,每个服务要包含容器的名称、镜像、映射端口、挂载点、网络模式、依赖关系等容器启动的配置参数
YAML 文件格式及编写注意事项#
YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。 使用 YAML 时需要注意下面事项: ●大小写敏感 ●通过缩进表示层级关系 ●不支持制表符 tab 键缩进,只能使用空格缩进 ●缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格 ●用 # 号注释 ●符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 - ●如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思 yaml文件格式:文件名格式通常是以 .yaml .yml 为后缀,用空格缩进表示字段的层级关系,特性: 可读性高,易于人类管理 json文件格式: 文件名格式通常是以 .json 为后缀,用大括号{}表示字段的层级关系,除了最后一个字段都要用逗号,结尾,特性: 易于api接口解析 #布尔值 debug:true debug:false #字符串 name: tom name: 'tom' name: "tom" #一个key有多个值 纵向格式 animal: - 飞行动物 - 爬行动物 - 水生动物 - 两栖动物 横向格式 animal: ["飞行动物","爬行动物","水生动物","两栖动物"] #对象object类型 一级字段: 二级字段1: #用空格缩进 表示字段的层级关系,同一层字段要靠左对齐 二级字段2: 三级字段: #数据结构: ●对象映射:键值对的字典 animal:pets ●序列数组:一组按次序排列 pets: - Cat - Dog - Goldfish pets:["Cat","Dog","Goldfish"l ●布尔值 debug:true debug:false 示例: # yaml 格式 languages: #序列的映射 - Java - Golang - Python websites: #映射的映射 cpu : name : - inter - amd Core: 2 memory:1024M swap:2048M disk:60G # Json 格式 json格式用大括号{}表示字段的层级关系,每层字段除了最后一个字段都要用看都好,结尾 { languages:[ "Java' 'Golang' 'Python' ], resources: { cpu: ['2'], memory: ['1024M'], swap: ['2048M'], disk: ['60G'] } } value : -> value:"helloword" hello word value: | -> value:"hello\word" #key: | 表示保留文本块里的换行符 hello word value: |- -> value:相当于 echo -n "helloword" hello word value: |+ -> value:"hello\nword\n" name:&a yaml #锚点,相当于a="yaml" book: *a #引用,相当于 echo $a book: yaml
#
字段 描述 build #指定 Dockerfile 文件名,要指定Dockerfile文件需要在build标签的子级标签中使用dockerfile标签指定 dockerfile #构建镜像上下文路径 context #可以是 dockerfile 的路径,或者是指向 git 仓库的 url 地址 image #指定镜像 command #执行命令,覆盖容器启动后默认执行的命令 container_name #指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量 deploy #指定部署和运行服务相关配置,只能在 Swarm 模式使用 environment #添加环境变量 networks #加入网络,引用顶级networks下条目 network_mode #设置容器的网络模式,如 host,bridge,... ports #暴露容器端口,与 -p 相同,但端口不能低于 60 volumes #挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称 volumes_from #从另一个服务或容器挂载卷,可选参数 :ro 和 :rw,仅版本 '2' 支持 hostname #容器主机名 sysctls #在容器内设置内核参数 links #连接到另外一个容器,- 服务名称[:服务别名] privileged #用来给容器root权限,注意是不安全的,true | false restart 设置重启策略,no,always,no-failure,unless-stopped no,默认策略,在容器退出时不重启容器。 on-failure,在容器非正常退出时(退出状态非0),才会重启容器。 on-failure:3,在容器非正常退出时重启容器,最多重启3次。 always,在容器退出时总是重启容器。 unless-stopped,在容器退出时总是重启容器,但是不考虑在 Docker 守护进程启动时就已经停止了的容器。 depends_on 在使用Compose时,最大的好处就是少打启动命令,但一般项目容器启动的顺序是有要求的,如果直接从上到下启动容器,可能会因为容器依赖问题而启动失败。例如在没启动数据库容器的时候启动应用容器,应用容器会因为找不到数据库而退出。depends_on标签用于解决容器的依赖、启动先后的问题。 php: depends_on: - apache - mysql
#
字段 描述
build #重新构建服务
ps #列出容器
up #创建和启动容器
exec #在容器里面执行命令
scale #指定一个服务容器启动数量
top #显示容器进程
logs #查看容器输出
down #删除容器、网络、数据卷和镜像
stop/start/restart #停止/启动/重启服务
DOCKER-COMPOSE部署#
#没有nginx镜像,在compose里构建个
先构建个nginx#
#定义docker-compose版本,可2或3 version: '3' #定义服务 services: #第一个服务 nginx: #直接指定镜像 #image: #使用dockerfile现场构建镜像 build: #指定dockerfile文件所在目录 可用绝对路径/相对路径 context: ./nginx #指定Dockerfile文件名 dockerfile: Dockerfile #指定容器名 container_name: nginx #映射端口 ports: - 80:80 - 443:443 #数据卷挂载 volumes: - ./nginx/html:/usr/local/nginx/html #加入网络 networks: lnmp: ipv4_address: 172.18.0.2 #mysql: #php: networks: lnmp: driver: bridge ipam: config: - subnet: 172.18.0.0/16 #volimes:
#复制,查看版本
#nginx启动
#构建nginx镜像
构建mysql和php#
#networks
mysql: image: mysql:lnmp container_name: mysql privileged: true volumes: - db-data:/usr/local/mysql networks: lnmp: ipv4_address: 172.18.0.4
# depends_on 依赖,php是依赖于MySQL和nginx的,两项有一项没启动php就不会启动
php: image: php:centos container_name: php ports: - 9000:9000 volumes: - db-data:/usr/local/mysql - ./nginx/html:/usr/local/nginx/html networks: lnmp: ipv4_address: 172.18.0.3 depends_on: - nginx - mysql
volumes:
db-data:
MySQL授权#
#创建个名为wordpress的库
#授权
#刷新
#测试
总结#
docker run -id [选项] 镜像:标签 [容器启动命令] docker-compose 配置模块文件常用的字段 image 使用本地镜像或从仓库拉取镜像创建容器 build 使用dockerfile现场构建镜像创建容器 context: dockerfile: command 指定容器启动命令,会覆盖镜像中的CMD指令 container_name --name environment -e --env network_mode --network network 指定加入的网络和IP --IP ports -p volumes -v volumes from --volumes-from ,版本3不支持 hostname -h --hostname sysctls --sysctl links --link privileged --privileged restart --restart depends_on 指定有依赖关系的容器 docker-compose [-f 模板文件] up -d #根据模板文件后台启动所有容器 ps #根据模板文件产看所有容器状态 down #根据模板文件停止并删除所有容器 stop|start|restart #根据模板文件停止|开启|重启所有容器
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?