本人想要用dockerfile直接創建mysql8數據庫,並且初始化讀取數據庫,看了網上的不少教程,踩過了好多坑,現在記錄一下創建過程:
一、用的是vmware安裝centos7系統
1. 首先要安裝docker環境,教程連接:https://www.cnblogs.com/mo-nian/p/12485210.html
2. 新建Dockerfile文件: vi Dockerfile
FROM daocloud.io/library/mysql:8 MAINTAINER BolingCavalry <zq2599@gmail.com> 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 ./$FILE_0 $WORK_PATH/ COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/ EXPOSE 3306 RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL
3. 新建 install_data.sh 文件:
vi install_data.sh
4. 修改執行腳本執行權限:
chmod +x install_data.sh
5. install_data.sh 文件內容(登錄mysql執行讀取SQL文件):
#!/bin/bash mysql -uroot -p$MYSQL_ROOT_PASSWORD <<EOF source $WORK_PATH/$FILE_0;
6. 創建 init.sql 文件:
SET NAMES utf8; CREATE DATABASE If Not Exists db_student Character Set utf8; CREATE USER 'userm'@'localhost' IDENTIFIED BY '123456'; GRANT all ON db_student.* TO 'userm'@'localhost'; GRANT all ON db_student.* TO 'root'@'%'; use db_student; drop table if exists `user`; CREATE TABLE user ( id tinyint(5) zerofill auto_increment not null comment '學生學號', name varchar(20) default null comment '學生姓名', age tinyint default null comment '學生年齡', class varchar(20) default null comment '學生班級', sex char(5) not null comment '學生性別', unique key (id) )engine=innodb charset=utf8; insert into user values('1','小明','15','初三','男'); insert into user values('2','小紅','13','初二','女');
7. 創建mysql鏡像:
docker build -t mysql8:latest .
8. 查看鏡像:docker images
啟動鏡像:
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql8:latest
9. 查看容器id:docker ps
docker ps
10. 進入容器:
docker exec -it 792039hda bash
11. 登錄mysql:
mysql -u root -p
輸入密碼:123456
查看數據: show databases;
可以看到數據庫存在讀入init.sql的數據。