场景
Docker中部署mysql数据库:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99213563
CentOS中使用Dockerfile部署带websocket的SpringBoot的jar包:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/119849922
在上面部署Mysql镜像和会使用Dockerfile的基础上。
如果要实现定制化一个mysql镜像,使容器运行起来就会有数据。
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
1、新建文件
在服务器上某路径下新建文件夹mysqldockerfile,在此文件夹下新建或者上传如下四个文件
2、编辑utf8mb4.cnf数据字符编码文件
init_connect='SET NAMES utf8mb4' character-set-server=utf8mb4 collation-server = utf8mb4_unicode_ci default-time_zone = '+8:00' [mysql] default-character-set=utf8mb4 [client] default-character-set=utf8mb4
3、编辑脚本文件install_data.sh
#!/bin/bash mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF source $WORK_PATH/$FILE_0;
4、编辑Dockerfile文件
FROM mysql:5.7 ENV WORK_PATH /usr/local/work ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d ENV FILE_0 init.sql ENV INSTALL_DATA_SHELL install_data.sh RUN mkdir -p $WORK_PATH COPY utf8mb4.cnf /etc/mysql/conf.d/utf8mb4.cnf COPY ./$FILE_0 $WORK_PATH/ COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ EXPOSE 3306 RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL
5、最后init.sql是数据库sql文件
set character set utf8; drop database if exists badao; CREATE DATABASE badao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; GRANT all ON badao.* TO 'root'@'%'; use badao; -- ---------------------------- -- 1、部门表 -- ---------------------------- drop table if exists sys_dept; create table sys_dept ( dept_id bigint(20) not null auto_increment comment '部门id', parent_id bigint(20) default 0 comment '父部门id', ancestors varchar(50) default '' comment '祖级列表', dept_name varchar(30) default '' comment '部门名称', order_num int(4) default 0 comment '显示顺序', leader varchar(20) default null comment '负责人', phone varchar(11) default null comment '联系电话', email varchar(50) default null comment '邮箱', status char(1) default '0' comment '部门状态(0正常 1停用)', del_flag char(1) default '0' comment '删除标志(0代表存在 2代表删除)', create_by varchar(64) default '' comment '创建者', create_time datetime comment '创建时间', update_by varchar(64) default '' comment '更新者', update_time datetime comment '更新时间', primary key (dept_id) ) engine=innodb auto_increment=200 comment = '部门表'; -- ---------------------------- -- 初始化-部门表数据 -- ---------------------------- set character set utf8; insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(102, 100, '0,100', '长沙分公司', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(103, 101, '0,100,101', '研发部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(104, 101, '0,100,101', '市场部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(105, 101, '0,100,101', '测试部门', 3, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(106, 101, '0,100,101', '财务部门', 4, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(107, 101, '0,100,101', '运维部门', 5, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(108, 102, '0,100,102', '市场部门', 1, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(109, 102, '0,100,102', '财务部门', 2, '若依', '15888888888', 'ry@qq.com', '0', '0', 'admin', sysdate(), '', null);
要注意这里的设置编码的地方
set names utf8; set character set utf8; drop database if exists badao; CREATE DATABASE badao DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
判断是否已经存在数据库,存在则删除掉,然后授予root权限。
最后删除创建表,然后插入表数据时要注意,避免出现中文乱码问题,在插入数据前要添加
set character set utf8;
比如:
-- ---------------------------- -- 初始化-部门表数据 -- ---------------------------- set character set utf8; insert into sys_dept values(100, 0, '0', '若依科技', 0, '若依', '15888888888', '123qq.com', '0', '0', 'admin', sysdate(), '', null); insert into sys_dept values(101, 100, '0,100', '深圳总公司', 1, '若依', '15888888888', '123qq.com', '0', '0', 'admin', sysdate(), '', null);
6、构建镜像
docker build -t mysqlwithdata .
注意后面有个点,代表Dockerfile在当前目录
7、运行容器
docker run -itd --name mysqlwithdata -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysqlwithdata
8、运行成功后查看运行中的容器
docker ps
9、此时访问数据库应该已经带数据了
如果没有数据,可以查看日志
docker logs -f mysqlwithdata
如果要修改脚本或者配置文件等需要重新执行该过程,需要
停掉容器
docker stop mysqlwithdata
删除掉容器
docker rm mysqlwithdata
删除掉镜像
docker rmi mysqlwithdata:latest
然后修改后重新执行上面的过程。
博客园:
https://www.cnblogs.com/badaoliumangqizhi/
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。