Docker mysql
我看到过这样的一句话 在创建容器前,我们创建一个数据卷mysql-volume,把它挂载到mysql容器中,实现数据持久化
那么如果不创建, 是否重启mysql容器数据就丢失了, 为此特地测试了停止容器和重新启动容器以及关机后开机重新启动容器, 实际测试是数据没有丢失的, 但是为什么还是需要增加一个新加卷呢, 我想应该是怕容器损坏, 或者需要修改容器的配置, 那么意味着数据可以需要导出来, 而切换挂载的数据卷应该就会方便很多吧
通过构建的mysql2的dockerfile副本执行的容器创建
docker run -itd -p 3306:3306 --name my_mysql2 -e -d mysql2:Dockerfile --character-set-server=utf8mb4 --collation_server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
一条命令实现启动容器并设置字符集, 兼容的加密方式
docker run --name mysql22 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql --character-set-server=utf8mb4 --default-authentication-plugin=mysql_native_password
数据挂载到本地, 配置文件读取挂载的, 设置好字符集和加密方式
mkdir -vp /data/docker/mysql/data
touch /data/docker/mysql/my.cnf
建议先执行拷贝配置文件
docker run -v /data/docker/mysql/data:/var/lib/mysql --name mysql22 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql --character-set-server=utf8mb4 --collation_server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
docker exec -it mysql22 /bin/bash
> cp /etc/mysql/my.cnf /var/lib/mysql
> exit
mv /data/docker/mysql/data/my.cnf /data/docker/mysql/my.cnf -y
这时候可以修改这个容器生成的配置文件后, 再删除掉容器
docker stop mysql22 && docker rm mysql22 && docker ps -a
docker run -v /data/docker/mysql/data:/var/lib/mysql -v /data/docker/mysql/my.cnf:/etc/mysql/my.cnf --name mysql_1 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=12345 -d mysql --character-set-server=utf8mb4 --collation_server=utf8mb4_unicode_ci --default-authentication-plugin=mysql_native_password
- 将一个已存在的容器修改为自启动
docker update --restart=always mysql_1
Flag | Description | |
---|---|---|
no | 不自动重启容器. (默认value) | |
on-failure | 容器发生error而退出(容器退出状态不为0)重启容器 | |
unless-stopped | 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 | |
always | 在容器已经stop掉或Docker stoped/restarted的时候才重启容器 |