安装 MySQL 服务

拉取镜像

  1. docker pull mysql[:tag]
  2. docker pull mysql:5.7

生成MySQL容器

方式一、
这是最基本设置。-e 指定环境变量,这里是用来设置初始化root用户的密码

  1. docker run -d --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7

存在的问题:
①、我们需要修改 mysql配置是很困难的。即使使用 docker exec -it 容器id /bin/bash 的方式进入到容器内部。进去了之后我们找到配置文件,此时发现 vi 命令它也没有默认安装!!
②、容器中的数据没有挂载到宿主机中,万一误删除容器会导致数据丢失。

方式二、
通过挂载的方式,将外部的配置文件挂载到容器内部。

  1. docker run -d --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -v mysqlconf:/etc/mysql/conf.d mysql:5.7

通过这种方式,我们可以很容易地修改 mysql 配置文件。例如修改字符集

  1. docker ps # 查询 Mysql 容器id
  2. docker volume ls # 查询所有数据卷
  3. docker volume inspect 数据卷名 # 查看数据卷所在宿主机挂载路径
  4. docker volume inspect mysqlconf
  5. cd 挂载路径
  6. vim mysql.cnf # 编辑 mysql 配置文件
  7. [mysql]
  8. default-character-set=utf8mb4
  9. [mysqld]
  10. character_set_server=utf8mb4
  11. docker restart mysql容器id # 重启容器
  12. 使用 navicat 工具连接
  13. show variables like 'char%'; # 验证字符编码修改是否生效

方式三、(推荐)
除了挂载配置文件外,还需要将日志文件 和 mysql数据文件挂载出来

  1. docker run -d --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root \
  2. -v mysqlconf:/etc/mysql/conf.d \
  3. -v mysqllog:/var/log/mysql \
  4. -v mysqldata:/var/lib/mysql \
  5. mysql:5.7

查看数据卷:
image.png

数据库备份

备份全库

  1. docker exec mysql名称|容器id sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql
  2. docker exec mysql:5.7 sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql

备份指定库表

  1. docker exec mysql sh -c 'exec mysqldump --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据

备份表结构

即只是备份表结构,不备份数据

  1. docker exec mysql sh -c 'exec mysqldump --no-data --databases 库表 -uroot -p"$MYSQL_ROOT_PASSWORD"' > /root/all-databases.sql --导出指定库数据不要数据

执行SQL脚本

  1. docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /root/xxx.sql

安装 Redis 服务

拉取镜像

  1. docker pull redis[:tag]
  2. docker pull redis:5.0.10

运行 Redis 容器

方式一、
这是最基本运行 redis 方式。

  1. docker run --name redis -p 6379:6379 -d redis:5.0.10

存在的问题:
①、无需使用密码即可在任意主机上连接 redis
②、没有指定 redis配置文件

方式二(推荐)
加载外部配置文件,将数据持久化到外部容器

  1. mkdir -p /root/redis/data # 用于存放外部持久化数据的数据卷目录
  2. docker run --name redis -p 6379:6379 \
  3. -v /root/redis/data:/data \ # 将容器中 /data目录出来
  4. -v /root/redis/redis.conf:/usr/local/etc/redis/redis.conf \ # 挂载配置文件
  5. -d redis:5.0.10 redis-server /usr/local/etc/redis/redis.conf # 启动 redis 使用指定配置文件

需要我们提前准备好 redis.conf。 redis.conf需要修改部分: ①、bind 0.0.0.0 # 允许任意主机访问 ②、appenonly yes # 开启 aof 持久化功能 ③、requirepass 密码 # 设置连接 redis 的密码

安装 Nginx

拉取镜像

  1. docker pull nginx

创建 Nginx 容器

  1. docker run -di --name nginx -p 80:80 nginx

将容器内的配置文件拷贝到指定目录(请先提前创建好目录)

  1. # 创建目录
  2. mkdir -p /home/ruoyi/nginx
  3. # 将容器内的配置文件拷贝到指定目录
  4. docker cp nginx:/etc/nginx /home/ruoyi/nginx/conf

终止并删除容器

  1. docker stop nginx
  2. docker rm nginx

创建 Nginx 容器

创建Nginx容器,并将容器中的/etc/nginx目录和宿主机的/home/ruoyi/nginx/conf目录进行挂载

  1. docker run -di --name nginx -p 80:80 -v /home/ruoyi/nginx/conf:/etc/nginx nginx

安装 Tomcat

拉取镜像

  1. docker pull tomcat:8.5-jdk8

运行 Tomcat 容器

做端口映射 以及将 webapps 目录挂载出来

  1. docker run -p 8080:8080 -v webapps:/usr/local/tomcat/webapps -d --name tomcat tomcat:8.5-jdk8

注意了,此时我们访问 tomcat 会出现如下:
image.png
原因是在镜像中 webapps 目录下没有文件。

  1. docker exec -it 60 /bin/bash # 进入到tomcat容器内部,然后查看 webapps目录下没有东西

解决的方法:

  1. cp -r webapps.dist/* webapps/