快速使用Docker部署MySQL、Redis、Nginx

本文涉及的产品
云原生内存数据库 Tair,内存型 2GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: 快速使用Docker部署MySQL、Redis、Nginx

快速上传下载工具(lrzsz)


# 安装lrzsz
yum install -y lrzsz


上传方式:拖拽上传到当前目录。rz -y选择上传。


下载指定文件:sz 文件路径,接着就让我们进行选择存放目录,牛逼!!!



Docker环境安装


安装yum-utils:


yum install -y yum-utils device-mapper-persistent-data lvm2


为yum源添加docker仓库位置:


yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


安装docker:


yum install -y docker-ce


启动docker:


systemctl start docker


配置镜像加速:


# 创建目录
sudo mkdir -p /etc/docker   
# 编写配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://aytmcj86.mirror.aliyuncs.com"]
}
EOF
# 将服务重启一下
sudo systemctl daemon-reload
# 重启docker服务
sudo systemctl restart docker


一、快速部署MySQL


mysql-docker文档


# 官方
docker run --name mymysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run -it --network some-network --rm mysql mysql -hmymysql -uroot -proot


正式快速部署:


1、下载MySQL5.7的docker镜像:


docker pull mysql:5.7


2、使用如下命令启动MySQL服务:


docker run -p 3306:3306 --name mysql \
-v /etc/localtime:/etc/localtime \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7


参数说明


-p 3306:3306:将容器的3306端口映射到主机的3306端口

-v /mydata/mysql/conf:/etc/mysql:将配置文件夹挂在到主机

-v /mydata/mysql/log:/var/log/mysql:将日志文件夹挂载到主机

-v /mydata/mysql/data:/var/lib/mysql/:将数据文件夹挂载到主机

-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码


3、将准备好的sql复制到容器中


# 复制宿主机的manage.sql到mysql容器下的/路径中
docker cp /mydata/manage.sql mysql:/


4、进入运行MySQL的docker容器:


# 在容器中创建一个新的命令行
docker exec -it mysql /bin/bash   # docker exec -it mysql mysql -uroot -p   # 使用mysql容器中的命令行


5、在容器中对mysql进行操作


# 使用MySQL命令打开客户端:
mysql -uroot -proot --default-character-set=utf8
# 此时进入mysql的命令行中,使用数据库并进行导入
use manage;
source /manage.sql;
# 接着创建一个账户,该账号所有ip都能够访问
grant all privileges on *.* to 'changlu' @'%' identified by '123456';


注意注意:


在mysql7中有一个groupby的问题:


我们可以自定义一个my.cnf放置到/mysql/conf目录中,docker的mysql镜像源没有带配置文件,我们进行绑定之后启动mysql也就有了


[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


# 修改添加好了之后,重启我们的docker容器
docker restart mysql


二、快速部署redis


redis镜像中默认时没有redis.conf的


参考文章:史上最详细Docker安装Redis (含每一步的图解)实战


下载Redis5.0的docker镜像:


docker pull redis:5


由于redis镜像中默认不会带redis.conf,所以若是我们想要使用配置文件来进行启动的话就需要自己去官方找redis.conf,再经过修改后放入到指定的目录,之后来容器启动时挂载即可:各个版本下载地址-redis官方


docker安装启动redis 说说那些年遇到的坑

需要修改的的点有:


1、一定要注意自己的redis版本
2、设置密码:requirepass 123456
3、#bind 127.0.0.1 要注释掉,允许对外连接
4、appendonly yes:开启持久化
5、# daemonize yes 一定要要注释,注释,注释!!!


之后使用如下命令启动Redis服务:


# –restart=always 总是开机启动
# –log是日志方面的
# –appendonly yes 开启redis 持久化
# –requirepass xxx 设置密码 
docker run --log-opt max-size=100m --log-opt max-file=2  \
  -p 6379:6379 --name redis  \
  -v /etc/localtime:/etc/localtime \
  -v /mydata/redis/redis.conf:/etc/redis/redis.conf  \
  -v /mydata/redis/data:/data  \
  -d redis:5 redis-server /etc/redis/redis.conf   \
  --appendonly yes   \
  --requirepass 123456


进入Redis容器使用redis-cli命令进行连接:


docker exec -it redis redis-cli


三、快速部署Nginx


下载Nginx1.10的docker镜像:


docker pull nginx:1.10


先运行一次容器(为了拷贝配置文件):若是不这样拷贝直接指定对应目录的话,在宿主机的conf目录下就都是为空的了


docker run --restart=always -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-d nginx:1.10


将容器内的配置文件拷贝到指定目录:


docker container cp nginx:/etc/nginx /mydata/nginx/


进入到宿主机的/mydata/nginx目录,修改该目录下nginx文件名称:


mv nginx conf


终止并删除容器:


docker stop nginx
docker rm nginx


启动nginx:


# /usr/share/nginx/html是nginx默认访问的路径、/var/log/nginx是对应的log日志、/etc/nginx也就是对应nginx配置文件
docker run -p 80:80 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx  \
-v /mydata/nginx/conf:/etc/nginx \
-d nginx:1.10


问题

1、关于Docker启动后端口绕过防火墙问题

问题背景:我启动了多个Docker容器后,开了防火墙也能够直接访问端口。


# 查看路由表
iptables --list



问题暂时不能解决,主要云服务器还有一层防火墙,就暂时把整个问题放一放。


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4天前
|
关系型数据库 MySQL Nacos
使用 Docker 部署 Nacos 并配置 MySQL 数据源
使用 Docker 部署 Nacos 并配置 MySQL 数据源
16 0
|
5天前
|
关系型数据库 应用服务中间件 nginx
Docker + node(koa) + nginx + mysql 线上环境部署
Docker + node(koa) + nginx + mysql 线上环境部署
|
5天前
|
关系型数据库 MySQL 数据库
轻松入门:使用Docker安装MySQL数据库的完全指南
轻松入门:使用Docker安装MySQL数据库的完全指南
|
15天前
|
存储 运维 NoSQL
Redis Cluster集群模式部署
Redis Cluster集群模式部署
42 4
|
18天前
|
监控 NoSQL 算法
手把手教你如何搭建redis集群(二)
手把手教你如何搭建redis集群(二)
30 1
|
18天前
|
存储 NoSQL 容灾
手把手教你如何搭建redis集群(一)
手把手教你如何搭建redis集群(一)
36 1
|
2月前
|
负载均衡 监控 NoSQL
Redis的几种主要集群方案
【5月更文挑战第15天】Redis集群方案包括主从复制(基础,读写分离,手动故障恢复)、哨兵模式(自动高可用,自动故障转移)和Redis Cluster(官方分布式解决方案,自动分片、容错和扩展)。此外,还有Codis、Redisson和Twemproxy等工具用于代理分片和负载均衡。选择方案需考虑应用场景、数据量和并发需求,权衡可用性、性能和扩展性。
224 2
|
2月前
|
存储 监控 负载均衡
保证Redis的高可用性是一个涉及多个层面的任务,主要包括数据持久化、复制与故障转移、集群化部署等方面
【5月更文挑战第15天】保证Redis高可用性涉及数据持久化、复制与故障转移、集群化及优化策略。RDB和AOF是数据持久化方法,哨兵模式确保故障自动恢复。Redis Cluster实现分布式部署,提高负载均衡和容错性。其他措施包括身份认证、多线程、数据压缩和监控报警,以增强安全性和稳定性。通过综合配置与监控,可确保Redis服务的高效、可靠运行。
207 2
|
2月前
|
存储 监控 负载均衡
redis 集群 (主从复制 哨兵模式 cluster)
redis 集群 (主从复制 哨兵模式 cluster)