1. 使用Dockerfile定制Mysql
Dockerfile
FROM mysql
#定义工作目录
ENV WORK_PATH /usr/local/work
#定义会被容器自动执行的目录
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
#定义sql文件名
ENV SQL_FILE schema.sql
ENV SQL_FILE1 privileges.sql
#定义shell文件名
ENV INSTALL_DB_SHELL setup.sh
#创建文件夹
RUN mkdir -p $WORK_PATH
#把数据库初始化数据的文件复制到工作目录下
COPY ./$SQL_FILE $WORK_PATH/
COPY ./$SQL_FILE1 $WORK_PATH/
#把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
COPY ./$INSTALL_DB_SHELL $AUTO_RUN_DIR/
#给执行文件增加可执行权限
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DB_SHELL
setup.sh
mysql -uroot -p$MYSQL_ROOT_PASSWORD << EOF
source /usr/local/work/schema.sql;
source /usr/local/work/privileges.sql;
schema.sql
-- 创建数据库
create database `demo` default character set utf8 collate utf8_general_ci;
use demo;
DROP TABLE IF EXISTS user;
create table user(
uid int primary key auto_increment,
uname varchar(50),
upwd varchar(50)
);
insert into user values(1,"admin","admin");
insert into user values(2,"tom","123");
privileges.sql
use mysql;
select host, user from user;
-- 因为mysql版本是8,因此新建用户为如下命令:
CREATE USER `lucy`@`%` IDENTIFIED WITH mysql_native_password BY '123';
-- 将docker_mysql数据库的权限授权给创建的docker用户,密码为123456:
grant all on demo.* to lucy@'%' with grant option;
-- 这一条命令一定要有:
flush privileges;
创建镜像并运行
docker build -t mysqldb .
docker run -p 3306:3306 --name mysqldb -e MYSQL_ROOT_PASSWORD=123456 -d mysqldb