使用docker来启动数据库服务时,可以很轻松和简单的安装数据库服务。
但是,在安装的时候,有些坑必须要避开。
- #运行mysql镜像
- docker run -it p 3306:3306 --name mysql5.7 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
-
- #进入mysql容器中,操作
- docker exec -it mysql5.7 /bin/bash
-
- #进入mysql客户端
- mysql -uroot -p123456
-
- #创建表,插入数据等。
使用这种方式是有问题的,无法解决中文乱码的问题,当容器被删除时,数据库中的数据也会被删除掉。这种方式是错误的。
1、创建容器时,配置容器数据卷
- docker run -d -p3306:3306 --privileged=true -v /home/lhz/mysql/log:/var/log/mysql -v /home/lhz/mysql/data:/var/lib/mysql -v /home/lhz/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql5.7 mysql:5.7
-
- -d 后台运行
- -v 挂载容器卷,将容器mysql的数据、日志和配置文件挂载到主机中
- --privileged 开放权限
- -e 设置环境变量
- --name 设置容器名
- 最后是 镜像名或镜像id
将mysql的配置,数据存放位置,日志挂载到主机中。
2、修改mysql的配置文件,设置字符集编码,解决中文乱码问题
- #主机中操作:
- cd /home/lhz/mysql/conf
- vim my.cnf
-
- #插入下面内容
- [client]
- default_character_set=utf8
- [mysqld]
- collation_server=utf8_general_ci
- character_set_server=utf8
3、重启容器
docker restart mysql5.7
4、测试
在mysql容器中创建数据库,创建表,插入中文,发现没有中文乱码
将mysql容器删除掉: docker rm -f mysql:5.7
重新执行步骤:1,2,3. 再查看之前插入的数据是否在。
1、创建redis容器
docker run -d -p6379:6379 redis:6.0.8
2、进入redis容器
- docker exec -it redis6.0.8 /bin/bash
-
- #测试:
- redis-cli
- set name lhz
- get name
1、准备redis的配置文件:
- #在宿主机创建目录/apps/redis
- #将redis.conf 文件模板拷贝到/apps/redis 目录下 ,这个配置文件需要自己去下载
-
- 修改redis.conf:
- #密码链接
- requirepass 123
-
- #允许外界连接
- 注释掉bind 127.0.0.1
-
- #daemonize no #后台启动
- 将daemonize yes 设置为 no 该配置和docker run 中的 -d参数冲突,会导致容器一直启动失败
-
- #开启数据持久化
- appendonly yes
2、创建容器
- docker run -d --name redis6.0.8 -p 6379:6379 --privileged=true -v /apps/redis/redis.conf:/etc/redis/redis.conf -v /apps/redis/data:/data redis:6.0.8 redis-server /etc/redis/redis.conf
-
- -d 后台运行
- --name 设置名字
- -v 设置卷
- --privileged =true 开放权限
- 最后的redis-server /etc/redis/redis.conf 设置redis使用哪个redis配置文件启动
这样运行的redis容器,可以在主机端修改配置文件,数据可以实现持久化,即使删除了redis容器,再以相同的方式运行起来,数据不会丢失。