在拉取Mysql镜像以后,就之可以直接的docker run 了,但是通常是希望运行后的数据要要被保存的,即使是我们平时自己学习的数据,不可能每次都需要重新搞一次数据吧。
运行命名:
sudo docker run \
-d \
-p 3306:3306 \
--privileged=true \
-v /var/mysql/log:/var/log/mysql \
-v /var/mysql/data:/var/lib/mysql \
-v /var/mysql/conf.d:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql \
mysql
因为会存在中文乱码问题,所以需要先去调整配置文件,根据上面的设置,配置文件在宿主机的
/var/mysql/conf.d 目录下,所以进入目录,sudo vim my.cnf ,贴如下配置
[client]
default_character_set=utf8mb4
[mysql]
default_character_set=utf8mb4
[mysqld]
init_connect='SET NAMES utf8mb4'
character_set_server=utf8mb4
collation_server=utf8mb4_unicode_ci
如果在调整配置文件之间,已经运行了的mysql 实例,最好是重启一下
sudo docker restart mysql
# 最后的mysql也可以是容器id,此mysql 并不是 镜像名称,而是实例名称 --name 参数指定的
再运行命令,打开mysql交互界面,就行了,后面的就是mysql的内容了
sudo docker exec -it mysql /bin/bash
最后可以通过命令,查看设置的编码格式生效与否
show variables like 'character%';
Run Redis
运行redis 也差不多,但是需要注意的是配置文件(redis.conf)有几个需要注意的地方
1. bind 127.0.0.1 -::1 ->改为 0.0.0.0,要不然只能本地连接,显然是不行的,需要docker可以访问
2. daemonize yes -> 改为 no,如果不改会导致和docker run -d 参数冲突,从而启动不成功
3. appendonly no -> 改为 yes ,这个是可选的,建议改,毕竟redis在生产中大部分是需要AOF持久化的 (默认路径 /var/lib/redis ,aof文件默认名称: appendonly.aof,rdb文件默认名称: dum.rdb)
4. 设置密码 requirepass <your-password>(当然,如果启用了ACL,要确认default用户是否冲突哈),然后将 protected-mode 设置为 no
5. dir /var/lib/redis -> 改为 /data
一个简单的配置文件:
bind 0.0.0.0
port 6379
dir /data
dbfilename dump.rdb
appendonly yes
appendfilename "appendonly.aof"
appenddirname "appendonlydir"
requirepass 123456
protected-mode no
设置完成以后,运行
sudo docker run \
-p 6379:6379 \
--privileged=true \
-v /etc/redis:/usr/local/etc/redis \
-v /var/lib/redis:/data \
--name redis \
-d redis:7.0-alpine \
redis-server /usr/local/etc/redis/redis.conf
这里运行的redis 是阉割版的,部分配置参数不支持,如果直接使用 官方的 redis.conf 文件可能会导致容器起不起来,可以通过查看日志,然后去调整就好了,日志命令:
sudo docker logs <container-id> 或者 <container-name>