[云原生1. ] 使用Docker-compose一键部署Wordpress平台

文章目录

  • [1. Docker-compose概述](#1. Docker-compose概述)
    • [1.1 简介](#1.1 简介)
    • [1.2 docker-compose 的三大概念](#1.2 docker-compose 的三大概念)
    • [1.3 docker-compose配置模板文件常用的字段](#1.3 docker-compose配置模板文件常用的字段)
    • [1.4 docker-compose 常用命令及格式](#1.4 docker-compose 常用命令及格式)
  • [2. YAML 文件的详细介绍及编写注意事项](#2. YAML 文件的详细介绍及编写注意事项)
    • [2.1 简介](#2.1 简介)
    • [2.2 yaml的特性](#2.2 yaml的特性)
      • [2.2.1 语法特点](#2.2.1 语法特点)
      • [2.2.2 数据结构](#2.2.2 数据结构)
      • [2.2.3 引号的区别](#2.2.3 引号的区别)
      • [2.2.4 内置类型列表](#2.2.4 内置类型列表)
    • [2.3 yaml文件格式](#2.3 yaml文件格式)
    • [2.4 json格式简介 (拓展)](#2.4 json格式简介 (拓展))
  • [3. 部署docker-compose服务](#3. 部署docker-compose服务)
    • [3.1 前置准备](#3.1 前置准备)
    • [3.2 安装docker-compose](#3.2 安装docker-compose)
    • [3.3 创建工作目录,编写相关Dockerfile文件](#3.3 创建工作目录,编写相关Dockerfile文件)
      • [3.3.1 创建工作目录](#3.3.1 创建工作目录)
      • [3.3.2 编写创建nginx、mysql、php的镜像的Dockerfile文件](#3.3.2 编写创建nginx、mysql、php的镜像的Dockerfile文件)
    • [3.4 编写配置文件docker-compose.yml](#3.4 编写配置文件docker-compose.yml)
    • [3.5 根据配置文件来构建并启动容器](#3.5 根据配置文件来构建并启动容器)
    • [3.6 登录容器](#3.6 登录容器)
    • [3.7 访问宿主机IP,安装Wordpress](#3.7 访问宿主机IP,安装Wordpress)

1. Docker-compose概述

1.1 简介

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

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

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

bash 复制代码
Dockerfile 文件  -->  docker build 一个个构建镜像  -->  docker run 一个个创建并启动容器

Dockerfile 文件  -->  docker-compose 自动完成所有的镜像的构建和容器的创建、启动

1.2 docker-compose 的三大概念

bash 复制代码
项目project -> 包含一个或多个服务service -> 包含一个或多个容器的镜像、映射端口、环境变量等启动参数
  • 默认使用项目的目录名做project项目名,支持使用 -p--project-name 来指定项目名
  • 在项目目录里要包含一个 docker-compose 配置模板文件,默认为 docker-compose.yml,支持使用 -f 或 --file 来指定项目的配置模板文件
  • 在配置模板文件里要包含一个或者多个服务,每个服务包含启动容器的名称、镜像、映射端口、环境变量、挂载点、网络模式、依赖关系等容器启动的配置参数

1.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
restart --restart 重启策略
depends_on 定义服务之间依赖关系
bash 复制代码
depends_on: 
  - php
  - httpd

1.4 docker-compose 常用命令及格式

bash 复制代码
docker-compose -f docker-compose.yml <选项> -d

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

2. YAML 文件的详细介绍及编写注意事项

2.1 简介

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

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

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

2.2 yaml的特性

2.2.1 语法特点

  • 大小写敏感
  • 通过缩进表示层级关系
  • 不支持制表符 tab 键缩进,只能使用空格缩进
  • 缩进的空格数目不重要,只要相同层级左对齐,通常开头缩进2个空格
  • 用 # 号注释

2.2.2 数据结构

  • 对象: 键值对的字典
  • 数组: 一组按次序排列的列表
  • 纯量: 单个的且不可再分的值
bash 复制代码
# 纯量
hello
# 数组
- Cat
- Dog
- Goldfish
# 对象
animal: pets

2.2.3 引号的区别

bash 复制代码
#单引号(''): 特殊字符作为普通字符串处理
name: 'Hi,\nTom'

#双引号(""): 特殊字符作为本身想表示的意思
name: "Hi,\nTom"

2.2.4 内置类型列表

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

2.3 yaml文件格式

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

bash 复制代码
一个字段key有多个值的表达式
横向写法:
test: ["test1", "test2", "test3"]

纵向写法:
ntest:
- "test1"
- "test2"
- "test3"
bash 复制代码
#多级字段的格式
顶级/一级字段:
    二级字段1: ["值1", "值2"]
    二级字段2: 
	    三级字段: 值     对象object类型
bash 复制代码
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 aaa    相当于 a=yaml
book: *a              相当于 echo $a , book:aaa

2.4 json格式简介 (拓展)

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

{ "字段": "值"}
{ "debug": true }          布尔值类型
{ "scj": "aaa" }     字符串类型

{
  "k1": ["scj", "scj1", "scj2"],
  "k2": ["zhangsan", 
           "lisi", 
		   "wangwu"]
}


{
  "websites": {                      一级字段
    "memory": "512M",                二级字段
	"disk": "100G",
    "cpu": {                         三级字段
	  "name": ["inter", "amd"]
	}
  }
}

3. 部署docker-compose服务

3.1 前置准备

bash 复制代码
#服务器
192.168.67.100

提前安装了nginx mysql php的镜像
bash 复制代码
systemctl stop firewalld
setenfore 0

3.2 安装docker-compose

bash 复制代码
#下载
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
bash 复制代码
#安装
chmod +x /usr/local/bin/docker-compose

#查看版本
docker-compose --version

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

3.3.1 创建工作目录

bash 复制代码
mkdir /opt/compose_lnmp
cd /opt/compose_lnmp

mkdir nginx mysql php

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

详情见构建LNMP架构并运行Wordpress个人博客平台

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

编写配置文件~docker-compose.yml·

使用现有的镜像创建容器(本地/仓库) images: name:tag

或者现场构建,基于Dockerfile

bash 复制代码
cd /opt/compose_lnmp

#本次nginx使用现场构建,php和mysql使用本地镜像
vim docker-compose.yml

version: '3'
services:
  nginx:
   image: nginx:lnmp
   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:

3.5 根据配置文件来构建并启动容器

bash 复制代码
docker-compose -f docker-compose.yml up -d

3.6 登录容器

bash 复制代码
#登录到Mysql容器

docker exec -it mysql /bin/bash -c "mysql"
sql 复制代码
create database wordpress;

grant all privileges on wordpress.* to 'wordpress'@'%' identified by '123456';
grant all privileges on *.* to 'root'@'%' identified by 'abc123';
flush privileges;
bash 复制代码
#登录到nginx容器

docker exec -it nginx /bin/bash
bash 复制代码
cd /usr/local/nginx
#修改html目录的属主
chown nginx html 
bash 复制代码
#重启容器
docker restart php
docker restart nginx
docker restart mysql

3.7 访问宿主机IP,安装Wordpress

bash 复制代码
#浏览器访问 

http://192.168.67.100/wordpress/index.php



相关推荐
武子康15 分钟前
Java-166 Neo4j 安装与最小闭环 | 10 分钟跑通 + 远程访问 Docker neo4j.conf
java·数据库·sql·docker·系统架构·nosql·neo4j
凤凰战士芭比Q1 小时前
LNMP环境部署 KodBox私有云盘
linux·架构
小猪咪piggy2 小时前
【微服务】(4) 负载均衡
微服务·云原生·架构
计算机小手4 小时前
使用 llama.cpp 在本地高效运行大语言模型,支持 Docker 一键启动,兼容CPU与GPU
人工智能·经验分享·docker·语言模型·开源软件
短视频矩阵源码定制4 小时前
矩阵系统哪个好?2025年全方位选型指南与品牌深度解析
java·人工智能·矩阵·架构·aigc
岚天start4 小时前
KubeSphere在线安装单节点K8S集群
docker·容器·kubernetes·k8s·kubesphere·kubekey
xyhshen4 小时前
记录一次K8S跨命名空间访问 xxx.xxx.svc.cluster.local 类似内部服务不通的问题
云原生·容器·kubernetes
栗子~~4 小时前
shell-基于k8s/docker管理容器、监控模型训练所消耗的最大CPU与最大内存脚本
docker·容器·kubernetes
海鸥814 小时前
在k8s中部署seaweedfs,上传文件到seaweedfs方法
云原生·容器·kubernetes
半梦半醒*4 小时前
k8s——pod详解2
linux·运维·docker·容器·kubernetes·负载均衡