使用docker搭建mysql数据库,mongodb数据库,redis数据库

web项目中经常会使用到mysql数据库,mongodb数据库,redis数据库,三种数据库的配置相当麻烦,但是使用docker会让配置变得非常简单。

一、docker搭建mysql数据库

搭建mysql数据库命令非常简单

docker run --name mysql1  -e MYSQL_ROOT_PASSWORD=asd123 -v /data/mysql1:/var/lib/mysql -d -p 3307:3306 mysql

命令解释:

	--name  给容器命名
	-e MYSQL_ROOT_PASSWORD=asd123   初始化mysql容器root账号密码为asd123
	-v /data/mysql1:/var/lib/mysql  挂载数据卷到本地/data/mysql1,通过本地/data/mysql1访问容器内文件
	-d 守护进程
	-p 向外映射端口,让外网通过3307端口访问mysql服务

这样就搭建起了一个可供外部访问的mysql数据库,数据库的root账号密码是asd123
使用 docker ps 查看数据库状态

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
a43bb6658a28        mysql:latest        "docker-entrypoint.s…"   About an hour ago   Up About an hour    33060/tcp, 0.0.0.0:3307->3306/tcp   mysql1

这个mysql容器也可以当做客户端,访问其他容器的mysql服务,我们再开启一个mysql数据库,并连接到刚才建好的数据库上

docker run --name mysql2 --link mysql1 -e MYSQL_ROOT_PASSWORD=asd123  -v /data/mysql2:/var/lib/mysql-d -p 3308:3306 mysql

使用mysql2容器去访问mysql1容器,

docker exec -it mysql2 mysql -u root -h mysql1 -P 3306 -pasd123 

然后就进入mysql1的数据库里了,如果有其他机器,可以用其他机器的mysql客户端访问3307或3308这两个刚开放的端口

mysql -u root -h IP -P 3307 -p

这里的IP是指刚刚mysql服务器的IP

解决客户端登录失败Authentication plugin ‘caching_sha2_password’ cannot be loaded:…

原来,MySql 8.0.11 换了新的身份验证插件(caching_sha2_password), 原来的身份验证插件为(mysql_native_password)。而客户端工具Navicat Premium12 中找不到新的身份验证插件(caching_sha2_password),对此,我们将mysql用户使用的 登录密码加密规则 还原成 mysql_native_password,即可登陆成功。

具体操作:
首先使用 MySql 数据库自带的命令行客户端工具登录数据库

use mysql

从数据库的user表中查询 mysql 用户原来使用的身份验证插件

select user,host,plugin,authentication_string from user;

将用户root使用的身份验证插件 替换为之前版本使用的 mysql_native_password ,修改成功后再次使用客户端工具,如无其它意外 , 应该是可以正常连接登录了。

alter user ‘root’@’%’ identified with mysql_native_password by ‘asd123’;

二、docker搭建mongodb数据库

运行mongo容器

docker run --name mongo2 -p 27019:27017 -v /data/mongo2/db:/data/db -d mongo --auth

运行docker ps 可以看到容器已经运行并监听了 27019 端口

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
56036a23aa23        mongo               "docker-entrypoint.s…"   6 seconds ago       Up 5 seconds        0.0.0.0:27019->27017/tcp            mongo2

现在需要给容器设置一个密码,执行

docker exec -it mongo2 mongo admin

进入容器后创建root账号

> db.createUser({user:'shilin',pwd:'asd123',roles:[{role:'root',db:'admin'}]})
Successfully added user: {
	"user" : "shilin",
	"roles" : [
		{
			"role" : "root",
			"db" : "admin"
		}
	]
}

这样就可以使用搭建好的mongo容器了

三、docker搭建redis数据库

运行redis容器

docker run --name redis1 -d -p 6380:6379 -v /data/redisdb:/data redis 

运行docker ps 可以看到容器已经运行并监听了 6380端口

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
f9fc955fcb43        redis               "docker-entrypoint.s…"   12 minutes ago      Up 12 minutes       0.0.0.0:6380->6379/tcp              redis

然后就是设置redis密码,可以通过设置临时密码或设置配置文件的方式设置密码
临时方式在容器 stop 后就失效了,不推荐使用
首先进入redis客户端 docker exec -it redis1 redis-cli,然后执行

127.0.0.1:6379> config set requirepass asd123
OK
127.0.0.1:6379> SET lin aaa
(error) NOAUTH Authentication required.
127.0.0.1:6379> auth asd123
OK
127.0.0.1:6379> SET lin aaa
OK

但是 容器停止后就失效了。执行 docker restart redis1 来重启redis数据库

lin@iZ2zefq26zde3vcgsd3gzrZ:/data/mysql1$ docker exec -it redis1 redis-cli
127.0.0.1:6379> get lin
"aaa"
127.0.0.1:6379> SET lin bbb
OK

看到已经不需要密码了
第二种方案是使用本地的redis.conf 来启动服务,通过数据转将redis.conf 挂载到容器里,然后使用redis-server redis.conf 命令启动容器,这个方法以后再说.

你可能感兴趣的:(docker,docker,mysql,mongodb,redis)