1. 使用Dockerfile定制Mysql

Dockerfile

  1. FROM mysql
  2. #定义工作目录
  3. ENV WORK_PATH /usr/local/work
  4. #定义会被容器自动执行的目录
  5. ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
  6. #定义sql文件名
  7. ENV SQL_FILE schema.sql
  8. ENV SQL_FILE1 privileges.sql
  9. #定义shell文件名
  10. ENV INSTALL_DB_SHELL setup.sh
  11. #创建文件夹
  12. RUN mkdir -p $WORK_PATH
  13. #把数据库初始化数据的文件复制到工作目录下
  14. COPY ./$SQL_FILE $WORK_PATH/
  15. COPY ./$SQL_FILE1 $WORK_PATH/
  16. #把要执行的shell文件放到/docker-entrypoint-initdb.d/目录下,容器会自动执行这个shell
  17. COPY ./$INSTALL_DB_SHELL $AUTO_RUN_DIR/
  18. #给执行文件增加可执行权限
  19. 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