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

本文涉及的产品
RDS Agent(兼容OpenClaw),2核4GB
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS AI 助手,专业版
简介: 快速使用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



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


相关文章
|
7月前
|
缓存 NoSQL 关系型数据库
MySQL 与 Redis 如何保证双写一致性?
我是小假 期待与你的下一次相遇 ~
738 7
|
7月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
3110 4
|
10月前
|
关系型数据库 应用服务中间件 nginx
Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)
本系列脚本提供RocketMQ、Nginx、MySQL、MinIO、Jenkins和Redis的Docker一键安装与配置方案,适用于快速部署微服务基础环境。
|
7月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
337 5
|
7月前
|
存储 NoSQL Redis
手把手教你用 Docker 部署 Redis
Redis是高性能内存数据库,支持多种数据结构,适用于缓存、消息队列等场景。本文介绍如何通过Docker快速拉取轩辕镜像并部署Redis,涵盖快速启动、持久化存储及docker-compose配置,助力开发者高效搭建稳定服务。
2212 8
|
7月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
776 6
|
7月前
|
存储 关系型数据库 MySQL
MySQL Docker 容器化部署全指南
MySQL是一款开源关系型数据库,广泛用于Web及企业应用。Docker容器化部署可解决环境不一致、依赖冲突问题,实现高效、隔离、轻量的MySQL服务运行,支持数据持久化与快速迁移,适用于开发、测试及生产环境。
981 4
|
9月前
|
关系型数据库 MySQL 数据库
为什么 MySQL 不推荐用 Docker 部署?
本文探讨了MySQL是否适合容器化的问题,分析了Docker容器在数据安全、性能瓶颈、状态管理及资源隔离等方面的挑战,并指出目前主流分布式数据库如TDSQL和OceanBase仍倾向于部署在物理机或KVM上。
434 0
|
监控 NoSQL 关系型数据库
Redis 和 MySQL数据一致
Redis 和 MySQL数据一致 1.MySQL和Redis处理不同类型的数据 读请求:对于一些实时性要求不高的数据,列如好友列表、近期回复,Redis进行处理。对于实时性要求高的数据,列如金融数据和交易数据,MySQL进行处理。
1819 0
|
12月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?