Docker安装MySQL和Redis
程序员文章站
2022-05-18 09:26:06
...
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
//[aaa@qq.com ~]$ 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
参数说明:
//启动一个容器
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
如图运行成功:
2.3 修改 MySQL 配置
修改为 UTF-8 编码:
//由于之前已经对 MySQL 容器的配置文件夹与 Linux 虚拟机进行了映射,
//所以直接对虚拟机进行操作即可。
cd /mydata/
ls
cd mysql
ls
cd conf/
ls
//效果如下所示:
/*
[aaa@qq.com vagrant]# cd /mydata/
[aaa@qq.com mydata]# ls
mysql
[aaa@qq.com mydata]# cd mysql
[aaa@qq.com mysql]# ls
conf data log
[aaa@qq.com mysql]# cd conf/
[aaa@qq.com conf]# ls
[aaa@qq.com 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
显示如下内容,即设置成功:
[aaa@qq.com conf]# docker exec -it mysql /bin/bash
aaa@qq.com:/# cd /etc/mysql/
aaa@qq.com:/etc/mysql# ls
my.cnf
aaa@qq.com:/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目录下并没有文件
/*
[aaa@qq.com vagrant]# mkdir -p /mydata/redis/conf
[aaa@qq.com vagrant]# cd /mydata/
[aaa@qq.com mydata]# ls
mysql redis
[aaa@qq.com mydata]# cd redis
[aaa@qq.com redis]# ls
conf
[aaa@qq.com redis]# cd conf
[aaa@qq.com conf]# ls
[aaa@qq.com 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 便安装完成了。
查看一下运行中的容器:
[aaa@qq.com 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
[aaa@qq.com conf]# docker restart redis
redis
//查看 docker 容器运行情况
[aaa@qq.com 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
[aaa@qq.com 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
[aaa@qq.com conf]# docker restart redis
redis
//进入 redis 容器
[aaa@qq.com conf]# docker exec -it redis redis-cli
//直接取出数据
127.0.0.1:6379> get aa
//取出成功~~~~
"bb"
至此,redis 的数据持久化完成~????
上一篇: Centos7安装Redis6.0时make出现报错
下一篇: html5中audio支持音频格式