注意:确保docker能正常拉取镜像容器:
docker安装可以见我另一篇博客:ubuntu安装docker教程--包括修改镜像源-优快云博客
1、创建本地目录用于存储 MySQL 数据和日志
在宿主机上创建两个目录,一个用于存放 MySQL 数据,另一个用于存放日志文件。
mkdir -p /path/mysql/data
# 注意: /path/mysql/data 路径可以自己指定
mkdir -p /path/mysql/logs
2、启动 MySQL 容器
使用 docker run 命令启动 MySQL 容器,并将端口映射为 3306,同时将数据和日志映射到本地磁盘。
注意:我这里指定的是mysql8.0的版本,不指定的话,就会安装最新版,9.0以上的,最新版的设置比较麻烦,8.0好设置一些!mysql8小版本应该是通用的
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /path/mysql/data:/var/lib/mysql \
-v /path/mysql/logs:/var/log/mysql \
mysql:8.0
3、配置 MySQL 以允许远程访问
MySQL 默认只允许本地访问。您需要修改 MySQL 配置以允许远程访问:
3.1、进入 MySQL 容器:
docker exec -it mysql mysql -u root -p
3.2、允许 root 用户从所有主机访问 MySQL
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
FLUSH PRIVILEGES;
3.3、为所有网络启用 MySQL 远程访问:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
4、配置 MySQL 容器网络,使其他容器可以访问
为了使其他 Docker 容器(例如 Java 应用)能够访问 MySQL 数据库,您需要将它们置于同一个 Docker 网络中。
4.1、创建一个 Docker 网络
docker network create my-network
4.2、将 MySQL 容器连接到该网络
docker network connect my-network mysql
可以跳过4.3步骤
4.3、当运行其他容器(例如 Java 应用)时,可以将它们连接到相同的网络,并使用 mysql 作为数据库的主机名。例如:
docker run -d --name java-app --network my-network my-java-image
这样,您的 Java 应用可以通过主机名 mysql 访问 MySQL 数据库。
5、验证远程访问
您可以从外部机器连接到 MySQL,使用 mysql-client 或其他工具:
mysql -u root -p -h <your-host-ip> -P 3306
是您宿主机的 IP 地址,3306是映射的端口。
注意:如果需要在其他机器上访问 MySQL,请确保宿主机的防火墙允许3306 端口的连接。或者关闭虚拟机防火墙。
6、设置mysql开机自启
先设置docker开机自启
systemctl enable docker
设置mysql开机自启
docker update mysql --restart=always;
7、控制台shell mysql中显示中
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
-- 或者使用下面的命令同时统一编码(以下和以上命令选择一种执行即可,效果一样)
set names ‘utf8’; (推荐)
补充一条:本机远程虚拟机
如果是使用ssh软件工具去连接虚拟机中的系统,比如ubuntu;
1、网络可以选择桥接,本机能够ping通虚拟机IP
2、需要系统安装ssh的服务,并开放22端口;
1、打开终端并输入以下命令来安装openssh-server:
sudo apt install openssh-server
2、确保Ubuntu防火墙允许SSH连接,可以使用命令:
sudo ufw allow 22
3、启动SSH服务:
sudo systemctl start ssh
4、检查SSH服务状态:
sudo systemctl status ssh
5、修改SSH配置文件(可选):
sudo nano /etc/ssh/sshd_config
一般只需要做到第2步;
或者你直接可以禁用掉防火墙:
1、停止防火墙服务:(3选1)
sudo systemctl stop ufw
或 sudo ufw disable
或 sudo systemctl stop iptables
2、禁用防火墙服务的自动启动:(2选1)
sudo systemctl disable ufw
或 sudo systemctl disable iptables
3、重启系统,以确保防火墙不会在系统启动时重新启用。