docker配置mysql,redis

介绍:

同样的软件,在不同机器上运行的效果可能不同。尤其是在开发大型项目时,经常由于环境引发莫名其妙的错误。docker可以尽量避免版本、环境导致的错误。

在docker中的软件,彼此是分隔开的,docker就像一家宾馆,每个软件单独占据一个房间。因此可以让mysql、redis等占有独立、干净的空间。

步骤:

安装docker

参考官网文档:在CentOS上部署docker https://docs.docker.com/engine/install/centos/

# 卸载旧docker
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
                  
# 设置存储库
sudo yum install -y yum-utils
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

# 安装docker引擎
sudo yum install docker-ce docker-ce-cli containerd.io

# 启动docker
sudo systemctl start docker

# 设置docker开机自启动
sudo systemctl enable docker

# 查看docker版本
docker -v

docker镜像加速

docker安装mysql,其实是去下载mysql的镜像,默认镜像源在国外,下载镜像非常慢,可以使用阿里云的docker镜像加速服务:https://cr.console.aliyun.com/cn-qingdao/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://bxoc6v62.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

安装mysql

需要哪些镜像,可以到docker hub中查找:https://hub.docker.com/ 在hub中搜索mysql,可以看到官方提供的镜像,点开官方镜像,点开Tags标签,下滑可以找到想要的版本,我选择5.7

回到CentOS中,让docker去hub中拉取5.7镜像 sudo docker pull mysql:5.7 Tags中的版本和这里的版本保持一致,镜像名和官方提供的名称保持一致。之后在docker中安装镜像:

# --name指定容器名字 -v目录挂载 -p指定端口映射  -e设置mysql参数 -d后台运行
sudo docker run -p 3306:3306 --name mysql \
-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
--name就是指定mysql的房间名,你可以安装任意个mysql,但是每个mysql的房间名不同。

3306:3306就是外部通过3306访问docker,docker再通过3306访问mysql,你也可以写成3307:3308。

-v就是将docker中的myqsl文件复制到CentOS本机,和一般意义的复制不同,通过更改本机文件配置,可以让docker中mysql使用同样的配置;而在docker中更改这些文件,外部文件也会随之更改。这样可以在外部随意修改配置文件就能更改mysq配置,也可以随时拿到mysql数据库的日志,数据库等数据。

-e就是设置mysql的登录密码

-d就是设置后台运行mysql

安装好后,我们可以使用 docker ps 查看当前docker内部运行的进程,发现mysql即为安装成功。

配置mysql

因为之前将mysql的配置文件目录挂载到了本机,所以可以在本机的/mydata/mysql/conf中创建my.cnf文件配置docker内的mysql

# 进入mysql房间,可以发现内部就是一个Linux环境,可以使用ls等命令查看
docker exec -it mysql bin/bash
# 退出房间
exit;

# 因为有目录映射,所以我们可以直接在镜像外执行
vi /mydata/mysql/conf/my.cnf 

# 将以下内容写入my.cnf
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve

# 重启mysql
docker restart mysql

# 设置myql容器在docker启动的时候启动
sudo docker update mysql --restart=always

安装redis

docker拉取最新镜像: docker pull redis

这里有个坑:redis配置文件只有一个redis.conf,如果只想挂载该文件,而不是整个目录的话,需要提前在本机创建好文件。否则docker会认为/mydata/redis/conf/redis.conf是个目录。

# 在本机上
mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
# 安装redis
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-v /mydata/redis/conf/redis.conf:/etc/redis/redis.conf \
-d redis redis-server /etc/redis/redis.conf

配置redis持久化数据

redis默认不会将内存中的数据持久化,我们需要对其修改持久化策略。

# 在本机修改配置文件
vim /mydata/redis/conf/redis.conf

# 插入下面内容,即可打开aof持久化
appendonly yes

# 重启redis
docker restart redis

# 设置redis容器在docker启动的时候启动
docker update redis --restart=always

查看是否保证数据持久化

# 直接进入redis客户端(/bash/bin是进入房间)
docker exec -it redis redis-cli

# 插入数据
set a b
get a

# 重启redis
docker restart redis

# 再次进入客户端查找数据
docker exec -it redis redis-cli
get a

配置redis密码

redis是内存型数据库,其高效的性能也使得其密码更容易爆破,所以建议密码强度要很高才行。可以使用在线密码生成器(密码长度长,特殊符号多,密码字符不重复)

# 进入本机配置文件
vim /mydata/redis/conf/redis.conf

# 插入该命令,保存退出
requirepass test123

# 重启redis
docker restart redis

Guess you like

Origin blog.csdn.net/weixin_43237362/article/details/117328822