Docker-compose 单机容器集群编排工具

ZYC·2024-01-29 15:52·109 次阅读

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
复制代码

 

Docker Compose配置常用字段#

复制代码
字段                            描述
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
复制代码

Docker Compose 常用命令#

复制代码
字段                              描述
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  #根据模板文件停止|开启|重启所有容器
复制代码

 

posted @   citywalk  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示
目录