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

目录

前言

1.Docker-compose简介

[2. YAML文件格式及编写注意事项](#2. YAML文件格式及编写注意事项)

[3. Docker-Compose配置常用字段](#3. Docker-Compose配置常用字段)

[4.Docker Compose常用命令](#4.Docker Compose常用命令)

5.使用Docker-compose创建LNMP环境,并运行Wordpress网站平台


前言

我们知道使用一个Dockerfile模板文件可以定义一个单独的应用容器,如果需要定义多个容器就需要服务编排。下面介绍Docker官方产品,Docker Compose。

1.Docker-compose简介

Dockercompose 项目是 Docker 官方的开源项目,**负责实现对 Docker 容器集群的快速编排。**Docker compose项目由 Python 编写,调用 Docker 服务提供的 API来对容器进行管理。因此,只要所操作的平台支持Docker API,就可以在其上利用 compose 来进行编排管理。

**Dockercompose一个用于定义和运行多容器 pocker 应用程序的工具。它允许用户使用 YAL 文件米定义应用程序的配置,包括容器的数量、容器之间的依赖关系。**环境变量、端口映射以及其他设置。然后,用户可以使用 docker-compose 命令来启动和管理这些容器。

使用 Docker compose 可以方便地管理多个容器,例如,可以同时启动一个 meb 服务器容器和一个数据库容器,并在它们之间建立网络连接。Docker compose还支持自定义网络,使得容器可以在不同的网络中进行通信。

Docker compose文件通常包含一个或多个服务,每个服务都由一个或多个容器组成。服务定义了容器应该执行的任务,以及容器之间的依赖关系。例如,一个 eD 服务器服务可以句含一个或多个Web 服务器容器,,而这些容器又依赖于一个数据库容器。

docker-compose将所管理的容器分为三层, 分别是工程(project),服务(service)以及容器(containner)

Docker-Ccompose 的项目配置文件默认为 docker-copose.yml,可通过环境变量 (COMPOSE_FILE 或 -f 参数自定义配置文件, 其定义了多个有依赖关系的服务及每个服务运行的容器。compose 允许用户通过一个单独的 docker-compose.yml模板文件(YAML格式)来定义一组相关联的应用容器为一个项目(project)。

2. YAML文件格式及编写注意事项

YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。类似于 json 数据描述语言,语法比 json 简单的很多。YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 \[\] 括起来, hash 用花括号 {} 括起来。

使用 YAML 时需要注意下面事项:

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释
  • 符号字符后缩进1个空格,如冒号 : 、逗号 , 、横杠 -
  • 如果包含特殊字符用单引号('')引起来会作为普通字符串处理,双引号(""): 特殊字符作为本身想表示的意思

yaml数据结构:

#键值对表示

  • animal:pets

#数组:一组按次序排列的列表

    • cat
    • dog
    • goldfish

#布尔值

复制代码
debug: "true"
debug: "false"

#yaml实例
languages:        #序列的映射 
  - java
  - Golang
  - Python
  
websites:         #映射的映射
  Baidu: www.baidu.com
  Wangyi: www.163.com
  Souhu: www.souhu.com
 
#或者
languages: ["java","Golong","Python"]
websites:
  Baidu:
    www.baidu.com
  Wangyi:
    www.163.com
  Souhu:
    www.souhu.com

3. Docker-Compose配置常用字段

字段 描述

  • build 指定Dockerfile文件名,要指定Dockerfile文件,需要在build标签的子级标签中使用dockerfile标签指定

  • dockerfile 指定dockerfile文件名

  • context 指定dockerfile文件所在的目录路径

  • image 指定镜像

  • command 指定容器的启动命令,会覆盖镜像中的CMD命令

  • container_name 指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量

  • deploy 指定部署和运行服务相关配置,只能在Swarm模式使用

  • environment 添加环境变量

  • networks 设置容器使用的自定义网络和IP

  • network_mode 设置容器的网络模式,如host,bridge,...

  • ports 暴露容器端口,与-p相同,但端口不能低于60

  • volumes 挂载一个宿主机目录或数据卷到容器,命名卷要在顶级volumes定义卷名称

  • volumes_from 从另一个服务或容器挂载卷,可选参数:ro和:rw,仅版本'2'支持

  • hostname 容器主机名

  • sysctls 在容器内设置内核参数

  • links 设置容器互联,"- 服务名称 :服务别名"

  • privileged 用来给容器root权限,注意是不安全的,true | fals

  • 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

4.Docker Compose常用命令

字段 描述

  • build 重新构建服务
  • up 创建和启动容器
  • exec 在容器里面执行命令
  • ps 列出容器
  • scale 指定一个服务容器启动数量
  • top 显示容器进程
  • logs 查看容器输出
  • down 删除容器、网络、数据卷和镜像
  • stop/start/restart 停止/启动/重启服务

5.使用Docker-compose创建LNMP环境,并运行Wordpress网站平台

复制代码
cd /opt
mkdir compose
cd compose/
mkdir lnmp-compose
cd lnmp-compose/
touch docker-compose.yml
mkdir nginx mysql php
cd nginx
将所需要的软件包移到该目录下
/opt/compose/lnmp-compose

vim docker-compose.yml
version: "3"
services:
  web:
    build:
      context: ./nginx/
      dockerfile: Dockerfile
    container_name: nginx
    ports:
    - 80:80
    volumes:
    - ./nginx/html:/usr/local/nginx/html
    networks:
      mynetwork:
        ipv4_address: 172.18.0.10
  db:
    image: mysql:lnmp
    container_name: mysql
    privileged: true
    volumes:
    - db-data:/usr/local/mysql
    networks:
      mynetwork:
        ipv4_address: 172.18.0.20
 
  php:
    image: php:lnnmp
    container_name: php
    ports:
    - 9000:9000
    volumes:
    - db-data:/usr/local/mysql
    - ./nginx/html:/usr/local/nginx/html
    networks:
      mynetwork:
        ipv4_address: 172.18.0.30
    depends_on:
    - web
    - db
networks:
  mynetwork:
    driver: bridge
    ipam:
      config:
      - subnet: 172.18.0.0/16
 
volumes:
  db-data:

docker-compose -f docker-compose.yml up -d
 
 
授权MySQL数据库
docker ps -a #查看MySQL容器id
docker exec -it 7023bfb95bc0
mysqladmin -u root -p password "abc123"
mysql -u root -pabc123
grant all on *.* to 'root'@'%' identified by 'abc123';
flush privileges;
相关推荐
XIAOHEZIcode2 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220702 天前
如何搭建本地yum源(上)
运维
武子康2 天前
调查研究-183 Apple container:Mac 上用轻量 VM 跑 Linux 容器,Swift 会改写本地容器体验吗?
docker·容器·apple
大树885 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠5 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质5 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工5 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
Alsn865 天前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
酣大智5 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_5 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化