Docker部署MySQL并实现远程连接

1.编写好dockerfile文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#指定基础镜像
FROM mysql:latest

#设置初始环境变量
ENV MYSQL_ROOT_PASSWORD=123456

ENV MYSQL_DATABASE=database

#用于将初始化脚本 init.sql 复制到 MySQL 容器的 /docker-entrypoint-initdb.d/ 目录中。当 #MySQL 容器启动时,它会自动执行该目录下的所有 SQL 脚本文件,从而完成数据库的初始化。
COPY init.sql /docker-entrypoint-initdb.d/

#EXPOSE指令用于在Dockerfile中声明容器在运行时监听的网络端口,但它并不会自动暴露端口,也不会将容
#器内部的端口映射到宿主机上。其主要作用是提供一种方式,让开发者和其他人能够清楚地了解该容器需要开
#放哪些端口
EXPOSE 3306

2.创建容器并运行

这里先切换到了我自己的MySQLDocker目录

1
cd MySQLDocker

(1)以下命令用于从当前目录下的 Dockerfile 构建一个新的 Docker 镜像,并将其命名为 mysql-image

1
docker build -t mysql-image .
详细解释
  • **docker build**:
    • 这是 Docker 的一个命令,用于根据 Dockerfile 构建一个新的镜像。
  • **-t mysql-image**:
    • -t--tag 的简写,用于为构建的镜像指定一个名称(和可选的标签)。在这里,镜像的名称是 mysql-image。如果想指定一个标签(例如版本号),可以写成 -t mysql-image:1.0
  • **.**:
    • 表示当前目录。Docker 会在这个目录下查找 Dockerfile,并使用它来构建镜像。这个目录也被称为构建上下文(build context)。Docker 会将当前目录下的文件和文件夹发送到 Docker 守护进程,因此确保当前目录中包含所有需要的文件(如 Dockerfile 和初始化脚本)。

(2)以下命令用于从 mysql-image 镜像创建并启动一个新的 Docker 容器,并将其命名为 mysql-container

1
docker run --name mysql-container -p 3306:3306 -d mysql-image
详细解释
  • **docker run**:
    • 用于创建并启动一个新的 Docker 容器。
  • **--name mysql-container**:
    • 为容器指定一个名称(mysql-container),便于后续操作。
  • **-p 3306:3306**:
    • 将容器的 3306 端口映射到宿主机的 3306 端口。这意味着可以从宿主机或其他机器通过 宿主机IP:3306 访问容器中的 MySQL 服务。
    • 格式为 -p 宿主机端口:容器端口
  • **-d mysql-image**:
    • -d 表示以 detached 模式运行容器(即在后台运行)。
    • mysql-image 是刚刚构建的镜像名称,Docker 将使用它来创建容器。

3.进入正在运行的 mysql-container 容器和进入 MySQL 的交互式命令行界面

1
docker exec -it mysql-container mysql -uroot -p123456
详细解释
  • **docker exec**:
    • 用于在正在运行的容器中执行命令。
  • **-it**:
    • -i 表示交互式模式,允许用户与容器内的命令交互。
    • -t 分配一个伪终端,使用户能够像在本地终端中一样操作。
  • **mysql-container**:
    • 指定目标容器的名称(即之前创建的 mysql-container)。
  • **mysql -uroot -p123456**:
    • 在容器内执行的命令,用于启动 MySQL 客户端。
    • -u root 表示以 root 用户登录 MySQL。
    • -p123456 表示 root 用户的密码是 123456

4.创建数据库用户并配置实现远程连接(MySQL 8.0及以上)

1
2
3
4
5
6
7
8
9
10
mysql> create user hhh@'%' identified by '123456';
Query OK, 0 rows affected (0.02 sec)

mysql> grant all privileges on *.* to hhh@'%' with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

mysql>

Docker部署MySQL并实现远程连接
http://blog.hrseno.cn/2025/01/20/网站部署-Docker部署MySQL/
作者
黄浩森
发布于
2025年1月20日
许可协议