背景:
部署MySQL数据库需要上传常用的数据库及相关表
部署MySQL数据库需要需要调整MySQL的配置文件
基于官方镜像创建自定义MySQL镜像
1.创建用于初始化的sql
# 将需要默认创建用的sql自定义成一个sql,用于sql的初始化
[kewen@centos-62 new-mysql5.7]$ vim init.sql
创建的表内容为需要插入的相关内容(数据库及相关表):
[kewen@centos-62 new-mysql5.7]$ cat init.sql
-- 以下数据根据自己实际需要进行添加
-- 创建数据库
CREATE DATABASE IF NOT EXISTS chenkewen;
-- 使用数据库
USE chenkewen;
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for test_name
-- ----------------------------
-- 创建表
DROP TABLE IF EXISTS `test_name`;
CREATE TABLE `test_name` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
`sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`age` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb3;
-- ----------------------------
-- Records of test_name
-- ----------------------------
-- 对表插入相关数据
INSERT INTO `test_name` VALUES ('1', 'chen', '1', '18');
INSERT INTO `test_name` VALUES ('2', 'wang', '2', '18');
[kewen@centos-62 new-mysql5.7]$
2.调整默认my.cnf文件
可以根据自己的要求调整 my.cnf 文件,默认my.cnf文件可以使用docker cp
从启动的docker容器中拉取出来。mysql5.7默认位置为:/etc/mysql/my.cnf
获取mysql5.7的my.cnf:
docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:5.7 && docker cp mysql-container:/etc/mysql/my.cnf ./ && docker rm -f mysql-container
3.创建.dockerignore
文件
创建.dockerignore
文件,将不需要build进镜像的文件夹或文件填写进去,如所属文件夹所有文件都需要build进镜像,则可以忽略此步骤。
4.创建dockerfile
文件
创建文件dockerfile
[kewen@centos-62 new-mysql5.7]$ vim dockerfile
编辑dockerfile
# 基于官方的mysql5.7文件
FROM mysql:5.7
# 将数据库初始化文件复制到容器中
COPY init.sql /docker-entrypoint-initdb.d/
# 指定 MySQL 的配置文件
COPY my.cnf /etc/mysql/my.cnf
5. build成新镜像
[kewen@centos-62 new-mysql5.7]$ docker build -t chenkewen/mysql:5.7 .
6.查看新镜像
[kewen@centos-62 new-mysql5.7]$ docker image ls | grep chen
chenkewen/mysql 5.7 7495f3060ad8 26 seconds ago 501MB
镜像可以push于docker hub,方便后续直接拉取使用。
docker push chenkewen/mysql:5.7
镜像也可以使用 docker save
存储,下次使用docker load -i
加载使用
# 存储
[kewen@centos-62 new-mysql5.7]$ docker save chenkewen/mysql:5.7 -o chenkewen-mysql5.7.tar
[kewen@centos-62 new-mysql5.7]$ ls
chenkewen-mysql5.7.tar dockerfile init.sql my.cnf
# 解压
[kewen@centos-62 new-mysql5.7]$ docker load -i chenkewen-mysql5.7.tar
Loaded image: chenkewen/mysql:5.7