Skip to content

编写 Dockerfile,创建一个 MySQL 数据库

编写 docker 脚本

编写如下的 docker 脚本,来创建一个 MySQL 数据库并设置对应的数据库连接信息:

dockerfile
# 使用MySQL 最新镜像作为基础镜像
FROM mysql:latest

# 设置MySQL的root账号密码为123456
ENV MYSQL_ROOT_PASSWORD=123456

# 创建名为shop的数据库
ENV MYSQL_DATABASE=shop

# 设置MySQL的时区为Asia/Shanghai
ENV TZ=Asia/Shanghai

# 将本地的my.cnf配置文件复制到容器内的/etc/mysql/目录下
COPY my.cnf /etc/mysql/my.cnf

# 将本地的init.sql脚本文件复制到容器内的/docker-entrypoint-initdb.d/目录下
# MySQL容器在启动时会自动执行该目录下的脚本文件
COPY init.sql /docker-entrypoint-initdb.d/

# 修改init.sql文件的权限为可执行
RUN chmod +x /docker-entrypoint-initdb.d/init.sql

# 暴露MySQL的默认端口3306
EXPOSE 3306

其中

  • my.cnf 文件是 MySQL 的配置文件,可以设置一些 MySQL 的参数;

  • init.sql 文件是 MySQL 的初始化脚本,可以在创建数据库后执行一些 SQL 语句,如创建表、插入数据等。

添加my.cnf配置信息

新建 my.cnf 文件, 添加以下配置信息:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone='+8:00'

这些配置信息可以设置 MySQL 的字符集、排序规则、时区等参数。

添加初始脚本

新建 init.sql 文件, 添加以下内容:

sql
USE shop;

-- 创建一个名为user的表
CREATE TABLE `user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 向user表中插入一条数据
INSERT INTO `user` (`username`, `password`) VALUES ('admin', '123456');

这些 SQL 语句可以在创建数据库后自动执行,创建一个名为 user 的表并向该表中插入一条数据。

构建镜像并启动容器

编写完 docker 脚本后,可以使用以下命令构建镜像并启动容器:

bash
# 构建镜像
docker build -t mysql-shop .

# 启动容器
docker run -d -p 3306:3306 --name mysql-shop mysql-shop

其中

-t 选项指定了镜像的名称和标签

.表示 Dockerfile 文件在当前目录下

-d 选项表示在后台运行容器

-p 选项将容器的 3306 端口映射到宿主机的 3306 端口上

--name 选项指定了容器的名称。

进入 MySQL 容器的 bash 终端

bash
docker exec -it mysql-shop bash