docker安装mysql,Redis

安装mysql

镜像仓库搜索mysql

https://hub.docker.com/

在这里插入图片描述

在这里插入图片描述
我这里选择5.7版本的镜像

docker pull mysql:5.7

下载mysql镜像

下载:

[root@localhost ~]# docker pull mysql:5.7
Trying to pull repository docker.io/library/mysql ... 
5.7: Pulling from docker.io/library/mysql
bf5952930446: Pull complete 
8254623a9871: Pull complete 
938e3e06dac4: Pull complete 
ea28ebf28884: Pull complete 
f3cef38785c2: Pull complete 
894f9792565a: Pull complete 
1d8a57523420: Pull complete 
5f09bf1d31c1: Pull complete 
1b6ff254abe7: Pull complete 
74310a0bf42d: Pull complete 
d398726627fd: Pull complete 
Digest: sha256:da58f943b94721d46e87d5de208dc07302a8b13e638cd1d24285d222376d6d84
Status: Downloaded newer image for docker.io/mysql:5.7

检查镜像是否下载成功:

[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql      5.7                 718a6da099d8        11 days ago         448 MB
docker.io/rabbitmq   management          43f79d83563f        7 weeks ago         187 MB

启动mysql镜像

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指定容器名字 --name mysql 表示容器名是mysql
-v目录挂载 /mydata/mysql/conf:/etc/mysql 将配置文件挂载到主机,以后如果要修改配置,直接在主机里改就行,不用每次都进容器里去改
-p指定端口映射
-e设置mysql参数 MYSQL_ROOT_PASSWORD=root 设置root用户的密码为root
-d后台运行
\ 表示换行

在这里插入图片描述

查看镜像是否在运行:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
ceb6e1c9634c        mysql:5.7           "docker-entrypoint..."   36 seconds ago      Up 35 seconds       0.0.0.0:3306->3306/tcp, 33060/tcp   mysql

注意:
如果发现镜像没在运行
使用docker ps -a查看镜像是状态是退出的状态Exited

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                      PORTS                                                                                        NAMES
0a063331d5a5        mysql:5.7             "docker-entrypoint..."   53 seconds ago      Exited (1) 51 seconds ago       

查看日志:发现是没有权限 docker logs 0a063331d5a5
在这里插入图片描述
Centos7安全Selinux禁止了一些安全权限,导致mysqlmariadb在进行挂载/var/lib/mysql的时候会提示没权限
先把镜像删除了

[root@localhost ~]# docker rm 0a063331d5a5
0a063331d5a5

再次运行,但是加上--privileged=true

docker run --privileged=true -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

navicat连接mysql

好运的话直接就连上了。连不上看看防火墙关了没或看看是不是出现如下问题。

问题一
nabicat连不上
在这里插入图片描述
telnet 192.168.59.131 3306也显示失败

正在连接192.168.59.131...无法打开到主机的连接。 在端口 3306: 连接失败

但是明明mysql容器已经运行了并且端口也映射了
进去容器里面,进入容器:docker exec -it mysql /bin/bash; 退出容器exit
登陆mysqlmysql -u root -p
出现:Can‘t connect to local MySQL server through socket /var/run/mysqld/mysqld.sock;
原因:没启动mysql
service mysql start

问题二
mysql服务启动后,再次使用navicat连接出现
在这里插入图片描述
进入容器:docker exec -it mysql /bin/bash
登陆mysql:mysql -u root -p
执行命令:设置允许远程访问

use mysql;
select host from user where user='root';
update user set host = '%' where user ='root';
flush privileges;

问题三
再次使用Navicat连接MySQL出现1251-Client does not support authentication protocol requested by server;
进入容器:docker exec -it mysql /bin/bash
登陆mysql:mysql -u root -p
修改密码为rootALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

在这里插入图片描述
终于成功了!

修改mysql配置

启动的时候是进行了配置文件的目录挂载

-v /mydata/mysql/conf:/etc/mysql 

因此在主机的/mydata/mysql/conf目录下,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

重启,mysql容器docker restart d9e048b0329d
进入容器:docker exec -it mysql /bin/bash
进入:cd /etc/mysql/ 发现多了个文件my.cnf

root@d9e048b0329d:/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

修改配置成功!

安装Redis

有了安装mysql的经验,安装redis轻松多了
1.拉取redisdocker pull redis
2.运行redis
如果直接挂载的话docker会以为挂载的是一个目录,所以我们先创建一个文件然后再挂载,在虚拟机中。

mkdir -p /mydata/redis/conf
touch /mydata/redis/conf/redis.conf
docker run --privileged=true  -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

注意:cents7下,还是要加 --privileged=true ,不然还是给你报没权限的错误日志
3.测试
直接进去redis客户端。

[root@localhost conf]# docker exec -it redis redis-cli
127.0.0.1:6379> set a b
OK

4.这个redis,默认是没有持久化的,需要修改配置
/mydata/redis/conf目录下,vi redis.conf
aof持久化

appendonly yes

重启容器

 docker restart ee28ef78b266

猜你喜欢

转载自blog.csdn.net/weixin_42412601/article/details/108036053