前提完成docker环境部署
执行 docker pull mysql:8.0 # 拉取 mysql 8.0镜像
docker pull mysql # 不加版本号拉取最新版本镜像
执行docker imeges #查看镜像部署完成状态
一般来说数据库容器不需要建立目录映射
启动容器
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
docker run :启动一个容器
-d :将容器作为后台进程运行
–name mysql :给容器设置一个名称为mysql
-p 3306:3306 :将主机的3306端口映射到容器中的3306端口(用于与外部应用程序通信)
-e TZ=Asia/beijing :配置信息,此处设置容器的时区为亚洲/北京
-e MYSQL_ROOT_PASSWORD=123456 :配置信息,设置MySQL的root用户密码为123456
mysql:8.0 指定了所使用的MySQL的镜像。这个参数告诉Docker使用官方的MySQL镜像来创建并运行容器。
docker ps -a 查看当前所有容器
docker start 容器ID或容器名 启动容器
docker stop 容器ID或容器名 停止容器
docker restart 容器ID或容器名 重启容器
(docker start mysql)以容器名启动mysql容器
(docker start 3218b38490ce)以容器ID启动mysql容器
docker exec -it mysql .bin/bash 进入容器
Docekr ps -a 查看所有容器实例
Docker rm 容器ID 删除容器实例
Docker rmi imageID 删除镜像
Docker rmi -f imageID 强制删除镜像
mysql保存原有数据
本地服务器新建文件
mkdir -p /opt/mysql/conf 保存docker容器内mysql配置文件
mkdir -p /opt/mysql/data 保存docker容器内mysql数据文件
mkdir -p /home/mysql/mysql-files 不加载启动报错
或使用mkdir -p ./mysql/{data,conf,logs} 快速创建
mysql-files 是 MySQL 数据库默认用于存储用户通过 LOAD DATA INFILE 命令导入的文件的目录。这个目录通常用于将外部数据文件加载到 MySQL 数据库中。
本地目录路径可根据实际需求更改
mysql 映射文件启动
docker run -d -p 3306:3306 --name mysql -v /opt/mysql/conf:/etc/mysql -v /opt/mysql/data:/var/lib/mysql -v /home/mysql/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
映射路径根据自己实际路径修改
启动报错:
docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (a415cca6ca6f95a916ad0fe172f8a63089eddc2e8b50f45671b0783022d271bc): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 3306 -j DNAT --to-destination 172.17.0.2:3306 ! -i docker0: iptables: No chain/target/match by that name.
可重启docker服务后重试
mkdir -p递归建立文件夹
docker cp mysql:/etc/mysql /opt/mysql/conf/
docker cp 拷贝命令
mysql 容器名称(name)
:/etc/mysql 需要拷贝的内容路径
/opt/mysql/conf/ 需要拷贝的目录
mysql映射文件
一般mysql容器的数据文件在var/lib/mysql下 my.cnf可使用下例文件,也可以拷贝其他配置文件,配置文件路径一定要设置正确。
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
#Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#Custom config should go here
!includedir /etc/mysql/conf.d/
mkdir -p ./mysql/{data,conf,logs} 递归快速创建本地所需文件夹
docker run -d -p 3306:3306 --name mysql -v /opt/mysql/data/:/var/lib/mysql -v /opt/mysql/logs/:/logs -v /opt/mysql/conf/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0
启动容器