安装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
禁止了一些安全权限,导致mysql
和mariadb
在进行挂载/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
登陆mysql
:mysql -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
修改密码为root
:ALTER 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.拉取redis
:docker 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