做什么
#1.docker下mysql镜像容器初始化
#2.将初始化sql文件通过init.sql文件内的SOURCE命令执行
#3.容器启动起来,mysql内就有相应的初始化数据了
先看目录结构
├── Dockerfile
├── README.md
├── init.sql
└── xxx
├── dir1
│ ├── sys_user.sql
│ ├── sys_org.sql
1.build镜像的Dockerfile
# 选择基础镜像
FROM mysql:latest
# 联系人
MAINTAINER mhl meihongliang@xxxx.com
# 工作/初始目录
WORKDIR /docker-entrypoint-initdb.d
# 使用root账户创建目录
USER root
RUN mkdir -p ./xxx/dir1
RUN mkdir -p ./xxx/dir1
RUN mkdir -p ./xxx/dir1
# 设置数据库密码(根据需要修改)
ENV MYSQL_ROOT_PASSWORD=root
# 将当前目录的内容COPY至指定目录
COPY ./init.sql /docker-entrypoint-initdb.d/
COPY ./sobey /docker-entrypoint-initdb.d/xxx
# 执行mysqld命令
CMD ["mysqld"]
init.sql
-- 建库 使用库 建表 插数据
CREATE DATABASE IF NOT EXISTS yourDatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 使用并用source命令执行你的初始化mysql
-- 可以执行多次source命令
USE yourDatabase;
SOURCE ./xxx/dir1/sys_user.sql;
SOURCE ./xxx/dir1/sys_org.sql;
sys_user.sql
CREATE TABLE `sys_user` (
`ID` int NOT NULL AUTO_INCREMENT,
`loginName` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`userCode` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`nickName` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE,
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='用户信息表';
-- 你具体的sql语句了
-- INSERT INTO `sys_user` (field1,field2) VALUES ('value1','value2');
README.md
# 在init目录下执行下述命令将此mysql镜像启动为mysql容器
# build docker下的mysql镜像
docker build -t yourCustomerImageName .
# 启动mysql容器
docker run --name mysql_3309 -e MYSQL_ROOT_PASSWORD=root -p 3309:3306 -d yourCustomerImageName
最后启动命令
docker run --name mysql_3309 -e MYSQL_ROOT_PASSWORD=root -p 3309:3306 -d yourCustomerImageName
以上操作跟着做是完全ok的,mysql容器内的数据是能正常初始化的
一些库/表/密码需要自行控制