由于mysql5和mysql8版本的不同,导致构建镜像的时候存在一定的差异,在此将mysql8镜像的构建做一个总结。

本次总共用到了四个文件,分别是Dockerfile,setup.sh,my.sql,run.sh。

1.Dockerfile

Dockerfile是构建镜像必须的文件,需要注意的是第二次copy时必须放到"/docker-entrypoint-initdb.d"路径下,在这个路径下会自动执行相关脚本。具体内容如下:

FROM mysql:8

RUN mkdir -p /mysql

COPY my.sql /mysql

COPY setup.sh /docker-entrypoint-initdb.d

RUN chmod a+x /docker-entrypoint-initdb.d/setup.sh

2.setup.sh

这里就是去执行sql语句的。如下:

#!/bin/bash

mysql -uroot -p$MYSQL_ROOT_PASSWORD <

source /mysql/my.sql;

3.my.sql

这里需要注意的是如果你的sql语句是从导出来的,那么需要在sql文件开头加两句话,因为导出来的sql语句是不包含创建数据源信息的,否则就会导致直接执行的时候出错。

CREATE DATABASE IF NOT EXISTS `my`;

USE `my`;

以下文件可以忽略,按照自己的sql语句添加即可,总的sql内容信息如下:

/*

Navicat MySQL Data Transfer

Source Server : 127.0.0.1_8899

Source Server Type : MySQL

Source Server Version : 80018

Source Host : 127.0.0.1:8899

Source Schema : my

Target Server Type : MySQL

Target Server Version : 80018

File Encoding : 65001

Date: 25/12/2019 13:50:49

*/

CREATE DATABASE IF NOT EXISTS `my`;

USE `my`;

SET NAMES utf8mb4;

SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------

-- Table structure for token

-- ----------------------------

DROP TABLE IF EXISTS `token`;

CREATE TABLE `token` (

`Token` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,

`TimeOutDate` datetime(0) NULL DEFAULT NULL

) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

4.run.sh

这个脚本文件是可以不用的,只是图个方便,自动执行docker的命令。

#!/bin/bash

echo "start build image ..."

docker build -t test .

echo "build success .."

sleep 3

echo "start run image ..."

docker run -e MYSQL_ROOT_PASSWORD=123456 -p 8899:3306 -d test

echo " success .."

最后在命令行运行:

sh run.sh

6001af35ce59727a20ac0073aa93906c.png

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐