Docker容器启动时初始化Mysql数据库

273 阅读1分钟
  • 创建文件Dockerfile,setup.sh,schema.sql,privileges.sql
mkdir mysql-demo
cd mysql-demo
touch Dockerfile
touch setup.sh
touch schema.sql
touch privileges.sql
  • Dockerfile:
FROM mysql:5.7
 
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes
 
COPY setup.sh /mysql/setup.sh
COPY schema.sql /mysql/schema.sql
COPY privileges.sql /mysql/privileges.sql
 
CMD ["sh", "/mysql/setup.sh"]
  • setup.sh:
#!/bin/bash
 
echo 'checking mysql status.'
service mysql status
 
echo '1.start mysql....'
service mysql start
sleep 3
service mysql status
 
echo '2.start importing data....'
mysql < /mysql/schema.sql
echo '3.end importing data....'
 
sleep 3
service mysql status
 
echo '4.start changing password....'
mysql < /mysql/privileges.sql
echo '5.end changing password....'
 
sleep 3
service mysql status
echo 'mysql is ready'
 
tail -f /dev/null
  • schema.sql: (注意引号的使用,数据库名,表名,字段名的引号使用 ` , 字符串值使用 ' )
-- 创建数据库
create database `docker_mysql`;
 
use docker_mysql;
 
-- 建表
DROP TABLE IF EXISTS `user`;
 
CREATE TABLE `user` (
 `id` bigint(20) NOT NULL,
 `created_at` bigint(40) DEFAULT NULL,
 `last_modified` bigint(40) DEFAULT NULL,
 `email` varchar(255) DEFAULT NULL,
 `first_name` varchar(255) DEFAULT NULL,
 `last_name` varchar(255) DEFAULT NULL,
 `username` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
-- 插入数据
INSERT INTO `user` (`id`, `created_at`, `last_modified`, `email`, `first_name`, `last_name`, `username`)
VALUES
  (0,1490257904,1490257904,'john.doe@example.com','John','Doe','user');
  • privileges.sql:
use mysql;
select host, user from user;
 
create user dev identified by '123456';
 
grant all on *.* to dev@'%' identified by '123456' with grant option;
 
flush privileges;
  • 构建镜像:
docker build -t mysql-dev .
  • 运行镜像:
docker run -d -p 13306:3306 --name mysql-dev mysql-dev