吐槽
搞大半天才搞定持久化的问题,如果随着docker重启,数据库内的数据就没了,那等于白搭。
作为docker和mysql小白,真的很难找到资料搭建起来
拉镜像
docker pull mysql
启动一个干净的mysql容器
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d --rm mysql
进入容器
按照下面命令执行
docker exec -it mysql bash
cd /etc/mysql/conf.d
echo "[mysqld]" > my-config.cnf
echo "innodb_use_native_aio=0" >> my-config.cnf
/etc/mysql/conf.d路径下,所有的.cnf都会加载,名称随便起就行了。
在Windows下,无法通过挂载/etc/mysql/conf.d在外部去添加my-config.cnf。
所以只能重新封装镜像。方式有直接在里面加cnf文件,这种方式针对Windows是很合理的;或者start脚本中做点手脚,用cp命令,挂载不受限制的路径,然后cp到/etc/mysql/conf.d中去,这种就比较费劲了。
在Linux下,则可以挂载/etc/mysql/conf.d,然后通过chmod修改权限,并不需要重新生成镜像。
封装成自己的镜像
docker commit mysql mymysql:1.0
编写 docker-compose.yml 文件
volumes是挂载
version: '2'
networks:
basic:
services: mysql:
container_name: mymysql
image: mymysql:1.0
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
volumes:
- ./MySQL:/var/lib/mysql
networks:
- basic
编写启动脚本start.sh
docker-compose -f docker-compose.yml up -d mysql
开开心心启动吧
sh start.sh
查看docker ip地址
一般是 192.168.99.100
docker-machine ip