• 【Docker从入门到入土 5】 使用Docker-compose一键部署Wordpress平台


    一、YAML 文件格式及编写注意事项(重要)

    1.1 简介

    在这里插入图片描述

    YAML 是一种标记语言,它可以很直观的展示数据序列化格式,可读性高。

    类似于 json 数据描述语言,语法比 json 简单的很多。

    YAML 数据结构通过缩进来表示,连续的项目通过减号来表示,键值对用冒号分隔,数组用中括号 [] 括起来, hash 用花括号 {} 括起来。

    1.2 yaml语法特性

    语法特点

    • 区分大小写
    • 通过空格缩进表示层级关系
    • 禁止使用tab缩进,只能使用空格键
    • 缩进的空格数目不重要,只要相同层级左对齐
    • 使用#表示注释

    数据结构

    • 对象: 键值对的字典
    • 数组: 一组按次序排列的列表
    • 纯量: 单个的且不可再分的值
    # 纯量
    hello
    # 数组
    - Cat
    - Dog
    - Goldfish
    # 对象
    animal: pets
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    引号区别

    • 单引号(‘’): 特殊字符作为普通字符串处理
    • 双引号(“”): 特殊字符作为本身想表示的意思
    # 单引号
    name: 'Hi,\nTom'
    # 双引号
    name: "Hi,\nTom"
    
    • 1
    • 2
    • 3
    • 4

    内置类型列表

    # YAML允许使用个感叹号(!)强制转换数据类型
    # 单叹号通常是自定义类型,双叹号是内置类型
    money: !!str
    123
    date: !Boolean
    true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    对应编号内置类型解释说明
    1!!int整数类型
    2!!float浮点类型
    3!!bool布尔类型
    4!!str字符串类型
    5!!null空值
    6!!set集合
    7!!seq列表
    8!!map键值表
    9!!binary字符串类型
    10!!timestamp日期时间类型
    11!!omap/!!pairs键值列表

    1.3 yaml文件格式

    文件名格式以 .yml 或者.yaml 为后缀,用 空格缩进表示字段的层级关系,可读性高,易于人类管理。

    一个字段key有多个值的表达式
    横向写法:
    test: ["test1", "test2", "test3"]
    
    纵向写法:
    ntest:
    - "test1"
    - "test2"
    - "test3"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    #多级字段的格式
    顶级/一级字段:
        二级字段1: ["值1", "值2"]
        二级字段2: 
    	    三级字段: 值     对象object类型
    
    • 1
    • 2
    • 3
    • 4
    • 5
    value:            value: 相当于echo helloworld!
      hello
      world!
    
    value: |          value: 相当于echo -e "hello\nworld!"
      hello
      world!
    
    value: |-         value: 相当于echo -n helloworld!
      hello
      world!
      
    value: |+         value: 相当于echo -e "hello\nworld!\n"
      hello
      world!
    
    value: >          value: 相当于echo "hello world!"
      hello
      world!
      
    name: &a zhangsan     相当于 a=yaml
    book: *a              相当于 echo $a , book: zhangsan
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    1.4 json格式简介

    json格式:文件名格式以 .json 为后缀,用 {} 表示字段的层级关系,程序接口解析效率高。

    { "字段": "值"}
    { "debug": true }          布尔值类型
    { "ylc": "dashuaige" }     字符串类型
    
    {
      "ky31": ["ylc", "shellking", "caoye"],
      "ky32": ["zhangsan", 
               "lisi", 
    		   "wangwu"]
    }
    
    
    {
      "websites": {                      一级字段
        "memory": "512M",                二级字段
    	"disk": "100G",
        "cpu": {                         三级字段
    	  "name": ["inter", "amd"]
    	}
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    二、Docker-compose

    2.1 简介

    docker-compose 是实现在单机上对容器集群编排管理的工具

    docker-compose是基于python开发的,能运行docker的平台,都能用docker-compose编排管理容器。

    本质就是在yaml格式的docker-compose配置模板文件里定义多个容器的启动参数和依赖关系,并使用docker-compose根据这个模板文件的配置启动和管理容器集群

    Dockerfile 文件  -->  docker build 一个个构建镜像  -->  docker run 一个个创建并启动容器
    
    Dockerfile 文件  -->  docker-compose 自动完成所有的镜像的构建和容器的创建、启动
    
    • 1
    • 2
    • 3

    2.2 docker-compose的三大概念

    项目project -> 包含一个或多个服务service -> 包含一个或多个容器的镜像、映射端口、环境变量等启动参数

    1)默认使用项目的目录名做project项目名,支持使用 -p--project-name 来指定项目名;

    2)在项目目录里要包含一个 docker-compose 配置模板文件,默认为 docker-compose.yml,支持使用 -f--file 来指定项目的配置模板文件;

    3)在配置模板文件里要包含一个或者多个服务,每个服务包含启动容器的名称、镜像、映射端口、环境变量、挂载点、网络模式、依赖关系等容器启动的配置参数。

    2.3 docker-compose配置模板文件常用的字段

    字段用法描述
    image现成的镜像:标签指定镜像
    build指定 Dockerfile 文件名
    command容器启动命令执行命令,覆盖容器启动后默认执行的命令
    container_name–name指定容器名称,由于容器名称是唯一的,如果指定自定义名称,则无法scale指定容器数量
    environment-e,-env添加环境变量
    networks–net,–network加入网络,引用顶级networks下条目
    ports-p暴露容器端口,与 -p 相同,但端口不能低于 60
    volumes-v挂载一个宿主机目录或命令卷到容器,命名卷要在顶级 volumes 定义卷名称
    volumes_from–volumes-from,仅版本2支持,版本3 ,使用顶级卷进行共享从另一个服务或容器挂载卷,可选参数 :ro 和 :rw
    hostname-h,–hostname容器主机名
    sysctls–sysctl在容器内设置内核参数
    links–link连接到另外一个容器,- 服务名称[:服务别名]
    privileged–privileged用来给容器root权限,注意是不安全的true | false
    restart–restart重启策略
    depends_on定义服务之间依赖关系
    depends_on: 
      - php
      - nginx
    
    • 1
    • 2
    • 3

    2.4 docker-compose 常用命令

    docker-compose -f docker-compose.yml <command> -d
    
    -f, --file FILE :使用特定的 compose 模板文件,默认为 docker-compose.yml
    -p, --project-name NAME :指定项目名称,默认使用目录名称
    -d :在后台运行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    command功能
    build重新构建服务
    ps列出容器
    up创建和启动容器
    exec在容器里面执行命令
    scale指定一个服务容器启动数量
    top显示容器进程
    logs查看容器输出
    down删除容器、网络、数据卷和镜像
    stop/start/restart停止/启动/重启容器

    三、部署docker-compose

    3.1 安装docker-compose

    #下载
    curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    #安装
    chmod +x /usr/local/bin/docker-compose
    
    #查看版本
    docker-compose --version
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    3.2 创建工作目录,编写相关Dockerfile文件

    1.创建工作目录

    mkdir /opt/compose_lnmp
    cd /opt/compose_lnmp
    
    mkdir nginx mysql php
    
    • 1
    • 2
    • 3
    • 4

    2.编写创建nginx、mysql、php的镜像的Dockerfile文件

    详见我的上一篇博客 【Dockerfile镜像实战】构建LNMP环境并运行Wordpress网站平台

    3.3 编写配置文件docker-compose.yml

    编写配置文件docker-compose.yml
    使用现有的镜像创建容器(本地/仓库) images: name:tag
    或者现场构建,基于Dockerfile
    相对于配置模板所在的目录

    cd /opt/compose_lnmp
    
    #本次nginx使用现场构建,php和mysql使用本地镜像
    vim docker-compose.yml
    version: '3'
    services:
      nginx:
        build:
          context: ./nginx
          dockerfile: Dockerfile
        container_name: nginx
        ports:
        - 80:80
        - 443:443
        volumes:
        - ./nginx/html/:/usr/local/nginx/html/
        - ./nginx/nginx.conf:/usr/local/nginx/conf/nginx.conf
        networks:
          lnmp:
            ipv4_address: 172.18.0.10
      
      mysql:
        image: mysql:lnmp
        container_name: mysql
        privileged: true
        volumes:
        - db-dir:/usr/local/mysql/
        networks: 
          lnmp:
            ipv4_address: 172.18.0.20
      
      php:
        image: php:lnmp
        container_name: php
        ports:
        - 9000:9000
        volumes:
        - db-dir:/usr/local/mysql/
        - ./nginx/html/:/usr/local/nginx/html/
        networks: 
          lnmp:
            ipv4_address: 172.18.0.30
        depends_on:
           - nginx
           - mysql
    
    networks: 
      lnmp:
        driver: bridge
        ipam:
          config:
            - subnet: 172.18.0.0/16
    volumes:
      db-dir:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54

    3.4 根据配置文件创建和启动容器

    docker-compose -f docker-compose.yml up -d
    
    • 1

    在这里插入图片描述

    3.5 登录容器,进行相关操作

    登录到Mysql容器

    docker exec -it mysql /bin/bash -c "mysql"
    
    • 1

    在这里插入图片描述

    create database wordpress;
    
    grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
    grant all privileges on *.* to 'root'@'%' identified by 'abc123';
    flush privileges;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    > 这里是引用

    登录到nginx容器

    docker exec -it nginx /bin/bash
    
    • 1
    cd /usr/local/nginx
    #修改html目录的属主
    chown nginx html 
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    3.6 访问宿主机IP,安装Wordpress

    浏览器访问 
    
    http://192.168.2.106/wordpress/index.php
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    密码:M4VysV#@3b^DLa5kU$
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    【学习笔记44】JavaScript的事件传播
    代码随想录 Day26贪心算法01-上
    Linux中查找最大文件的命令是什么?
    uniapp 小程序 身份证 和人脸视频拍摄
    Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件(更新)
    基于SpringBoot的零食商城
    农业气象站的工作原理
    shell编写循环检查脚本
    计算机网络面试题【面试】
    Flink 中的时间和窗口(一)
  • 原文地址:https://blog.csdn.net/q2524607033/article/details/134018815