Docker安装MySQL和Redis

1. Docker镜像仓库

Docker镜像仓库:https://hub.docker.com/


2. 安装 MySQL

2.1 下载 MySQL 镜像文件

启动并连接 Linux 虚拟机

vagrant up
vagrant ssh

Linux 下进行安装(最新版MySQL):

$ sudo docker pull mysql

或者指定版本(以 5.7 为例):

$ sudo docker pull mysql:5.7

查看是否下载成功:

$ sudo docker images
//[vagrant@bogon ~]$ sudo docker images
//REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
//mysql               5.7                 718a6da099d8        2 weeks ago         448MB

2.2 创建实例并启动

切换到 root 用户:

$ su root
//提示输入Password,我们的账号和密码都是默认的 vagrant,输入vagrant即可:
vagrant

//再查看当前用户
whoami
//显示 root 即可。

安装MySQL容器:

//以下操作均为 root 用户,复制所有运行即可:
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

高级版本(mysql8.0+)无法启动mysql:
参考这里:linux下docker启动mysql不成功解决方法https://blog.csdn.net/x1064320359/article/details/120816832

参数说明:

//启动一个容器
docker run

//以下 ":" 前的路径为 Linux虚拟机挂在的路径
//":"后面的路径为容器内的路径
//将 Linux 虚拟主机的 3306 端口映射到 MySQL容器的 3306 端口
-p 3306:3306

//将日志文件夹挂载到 Linux 虚拟主机
-v /mydata/mysql/log:/var/log/mysql
//将配置文件夹挂载到 Linux 虚拟主机
-v /mydata/mysql/data:/var/lib/mysql
//将配置文件夹挂载到 Linux 虚拟主机
-v /mydata/mysql/conf:/etc/mysql

//初始化MySQL密码为 root,(默认用户名也为 root 这里不做修改)
-e MYSQL_ROOT_PASSWORD=root

在这里插入图片描述
测试是否运行成功:

//查看 docker 中正在运行的容器:
docker ps
// 下面是查看所有容器 (运行和没运行的)
docker ps -a

如图运行成功:
在这里插入图片描述

2.3 修改 MySQL 配置

修改为 UTF-8 编码:

//由于之前已经对 MySQL 容器的配置文件夹与 Linux 虚拟机进行了映射,
//所以直接对虚拟机进行操作即可。
cd /mydata/
ls

cd mysql
ls

cd conf/
ls

//效果如下所示:
/*
[root@bogon vagrant]# cd /mydata/
[root@bogon mydata]# ls
mysql
[root@bogon mydata]# cd mysql
[root@bogon mysql]# ls
conf  data  log
[root@bogon mysql]# cd conf/
[root@bogon conf]# ls
[root@bogon conf]#
*/

此时我们发现 conf 目录下并没有配置文件,我们要新建配置文件并填写代码:

//接上面代码,在 conf 目录下新建 my.cnf 文件:
vi 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

//之后按 esc 输入代码退出:
:wq

接下来重启 MySQL 容器:

docker restart mysql

查看容器内部是否修改成功:

//进入容器内部
docker exec -it mysql /bin/bash
//之前设置的映射路径为:/mydata/mysql/conf <--->/etc/mysql
cd /etc/mysql/
ls
cat my.cnf

显示如下内容,即设置成功:

[root@bogon conf]# docker exec -it mysql /bin/bash
root@ae160d217caf:/# cd /etc/mysql/
root@ae160d217caf:/etc/mysql# ls
my.cnf
root@ae160d217caf:/etc/mysql# cat 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

3. 安装 Redis


3.1 下载 Redis 镜像文件

进入 root 账户后执行如下代码:

//下载最新的 Redis 镜像(因为未指定版本号~)
docker pull redis

3.2 创建实例并启动

这里与MySQL不同!
由于映射的路径中包含现在并不存在的目录以及文件,所以我们必须先创建目录和文件才可以映射。

//创建目录
mkdir -p /mydata/redis/conf

//conf目录下并没有文件
/*
[root@bogon vagrant]# mkdir -p /mydata/redis/conf
[root@bogon vagrant]# cd /mydata/
[root@bogon mydata]# ls
mysql  redis
[root@bogon mydata]# cd redis
[root@bogon redis]# ls
conf
[root@bogon redis]# cd conf
[root@bogon conf]# ls
[root@bogon conf]#
*/

//接下来在conf目录下新建redis.conf文件
touch 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 便安装完成了。

查看一下运行中的容器:

[root@bogon conf]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e5e7b9756d04        redis               "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:6379->6379/tcp              redis

3.3 数据持久化

测试一下 Redis 效果:

//利用 redis-cli 客户端进入 redis
docker exec -it redis redis-cli

//存入数据
set a b
//读取数据
get a
//结果:
//"b"
//退出redis
exit

//然后重启一下redis
docker restart redis

//重启完毕再次进入redis
docker exec -it redis redis-cli
//读取一下之前存入的 "a" 的 value
get a
//(nil)

返回为空,没有读到值,这就是因为 redis 的非持久化特性,数据是存放在内存中的,如果 redis 重启,那么数据便丢失了。

继续操作:

//首先退出 redis
exit
//找到配置文件目录
pwd
ls
//修改配置文件
vi redis.conf

//编辑页面输入代码,使 redis 启用 aof 的持久化方式
appendonly yes
//键盘esc,然后保存退出
:wq

接下来测试一下:

//重启 redis
[root@bogon conf]# docker restart redis
redis

//查看 docker 容器运行情况
[root@bogon conf]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e5e7b9756d04        redis               "docker-entrypoint.s…"   23 minutes ago      Up 11 seconds       0.0.0.0:6379->6379/tcp              redis

//进入 redis
[root@bogon conf]# docker exec -it redis redis-cli
//存入数据
127.0.0.1:6379> set aa bb
OK
//取出数据
127.0.0.1:6379> get aa
"bb"
//退出 redis 容器
127.0.0.1:6379> exit

//再次重启 redis
[root@bogon conf]# docker restart redis
redis
//进入 redis 容器
[root@bogon conf]# docker exec -it redis redis-cli
//直接取出数据
127.0.0.1:6379> get aa
//取出成功~~~~
"bb"

至此,redis 的数据持久化完成~😄

4. 设置 Docker 容器自启动

前面启动容器的时候我们并没有设置容器自启动,这里我们设置一下。

//进入管理员模式
[vagrant@bogon mydata]$ su root
Password:vagrant

//查看 docker 容器运行情况
[root@bogon mydata]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

//查看所有的 docker 容器
[root@bogon mydata]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMES
e5e7b9756d04        redis               "docker-entrypoint.s…"   21 hours ago        Exited (0) 20 hours ago                       redis
ae160d217caf        mysql:5.7           "docker-entrypoint.s…"   22 hours ago        Exited (0) 20 hours ago                       mysql
//设置 mysql 容器自启动
[root@bogon mydata]# docker update mysql --restart=always
mysql
//设置 redis 容器自启动
[root@bogon mydata]# docker update redis --restart=always
redis

设置完毕~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值