"让我,重获新生~"
MySQL 灾难恢复
熟练掌握挂载卷的使用,将Mysql的业务数据存储在 外部。
实战思想:
使用 MySQL 5.7 的镜像创建容器并创建一个普通数据卷 "mysql-data"用来保存容器中产生的数据。我们需要容器连接到Mysql服务,并且创建数据库test,并在该数据库中创建一个表来插入一些简单的数据信息。
准备镜像:
docker pull mysql:5.7
创建容器:
注:-e 选项通过参数 MYSQL_ROOT_PASSWORD 来传递 MySQL 密码
docker container run --name mysql -itd
-e MYSQL_ROOT_PASSWORD=wgzzs@123
-v/data/var/mysqld/:/var/lib/mysql mysql:5.7
![](https://i-blog.csdnimg.cn/blog_migrate/640dcbeb90aff8fdcbe6e113813f57ba.png)
连接 MySQL 的 shell, 创建数据库:
接下来就是建表和插入数据的过程,这里不细讲:
在宿主机中查看 volume:
可以看到容器中 MySQL 创建的数据库和表数据以及持久化到宿主机挂载的目录下了。
突然,有一天咱们机器的系统资源吃紧,变得缓慢。一个哥们脑子发抽,将Mysql服务停掉并删除了:
不过好在,我们将容器内MySQL的数据做了绑定卷,它的数据还在宿主机上。我们现在要做的就是进行数据恢复。
![](https://i-blog.csdnimg.cn/blog_migrate/2e1e0a718be97215cfe5976e4e6b4f48.png)
成功登录Mysql数据后,我们进入test库中,查询表信息:
数据仍然是存在的!
Docker Compose 部署自定义服务
我们编写一个简单的案例: nginx 反向代理到我们的一个 springboot 微服务,微服务访问我们的 msyql 数据库查询用户信息。
springboot简介
Spring Boot是一个开源的Java框架,它使得开发人员能够快速搭建和运行基于Spring的应用程序。
特征:
🥏 SpringBoot Starter:他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中。
🥏 使编码变得简单,提供了大量的注解,极大的提高了工作效率。
🥏 自动配置:SpringBoot的自动配置特性利用了Spring对条件化配置的支持,合理地推测应用所需的bean并自动化配置他们。
🥏使部署变得简单,SpringBoot内置了三种Servlet容器,Tomcat,Jetty,undertow. 出自这里
创建一个 springboot 应用,配置 maven 项目:
有一些Idea中没有集成Spring initializr,可以访问官网。登录该网站,填写项目信息,选择依赖后,点击 Generate Project。
解压生成的压缩包,使用Idea打开项目文件,点击右侧Mavn菜单栏,双击clean清理没问题,工程成功。
点击package,我们发现也能正常打包:
最终我们是要去访问机器上的Mysql,所以我们就要开始配置它的用户名和密码。
配置Mysql的依赖驱动:
在属性文件中,配置数据源(Mysql用户名和密码):
编写一个简单的user控制类:
回到main类后,点击启动我们的服务在8080号端口,该Web能够在本地运行。
编写yml文件:
version: "3.8"
services:
web:
image: 1.24.0
ports:
- 8080:80
networks:
- myweb
volumes:
- /data/nginx/conf.d:/etc/nginx/conf.d # 这里我们会更改配置文件的 启用反向代理
depends_on:
mysys:
condition: service_started
mysys:
image: java:8
depends_on:
mysql:
condition: service_healthy
command: java -jar /app/demojdbc-0.0.1-SNAPSHOT.jar # 编译项目
volumes:
- /data/app/:/app/
networks:
- myweb
mysql:
image: mysql:5.7
volumes:
- /data/mysql/varlib/:/var/lib/mysql
- /data/mysql/init/:/docker-entrypoint-initdb.d/
environment:
MYSQL_ROOT_PASSWORD: wgzzs@123
healthcheck:
test: mysql --user=root --password='root' -e "SELECT 1;"
interval: 10s
timeout: 5s
retries: 10
networks:
- myweb
networks:
myweb:
我们需要通过将访问nginx服务的流量,转打给正在运行的Web Java程序。
![](https://i-blog.csdnimg.cn/blog_migrate/439087f8e43f49e0882ea53ba280af8e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/332df0ecd94ffde2da787d0864670bba.png)
将数据库初始化文件 init.sql 放入到./mysql/init 目录:
drop database if exists test;
CREATE DATABASE test DEFAULT CHARACTER SET utf8;
use test;
CREATE TABLE users (
sno int(11) DEFAULT NULL,
sname varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
INSERT INTO users values (1,'Bob'),(2,'Linda')
将应用 jar 包放入到./app 目录:
启动我们的项目:
我们可以在Mysql中查询到被插入的数据:
Docker Compose 部署 WordPress
WordPress简介
WordPress 是使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设属于自己的网站。也可以把 WordPress 当作一个内容管理系统来使用。
WordPress 有许多第三方开发的免费模板,安装方式简单易用。不过要做一个自己的模板,你一定需要具备前端技术的支持。
拉取WordPress镜像:
docker pull wordpress:4.5-fpm
当然这一步可以不做,因为后面执行.yml文件时,会自动拉取。
部署 WordPress:
# 定义所有services信息
version: "3.8"
services:
mysql:
image: mysql:5.7
volumes:
- /root/wordpress/var/mysql/data/:/var/lib/mysql
# 定义容器重启策略
restart: always
# 设置环境变量
environment:
MYSQL_ROOT_PASSWORD: mywordpress123
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
healthcheck:
test: mysql --user=root --password='mywordpress123' -e "SELECT 1;"
interval: 10s
timeout: 5s
retries: 10
wordpress:
image: wordpress:latest
# 构建依赖顺序,Mysql先启动
depends_on:
mysql:
condition: service_healthy
# 建立映射关系
ports:
- "8080:80"
restart: always
volumes:
- /root/wordpress/var/www/html/:/var/www/html
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
使用 docker compose config检查yml格式:
docker compose up -d
配置参数,点击安装:
进入后台:
删除,释放空间:
本篇到此结束,感谢你的阅读。
祝你好运,向阳而生~