[Java学习笔记]MySql的Dockerfile编写

一、什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
这里不讲Dockerfile的指令,可自行百度。

二、创建MySql的Dockerfile

创建基于5.7.30版本的MySql,编写Dockerfile文件具体如下:

#创建一个基于5.7.30版本的MySql
FROM mysql:5.7.30 

MAINTAINER don
EXPOSE 3306
LABEL version="0.1" description="Mysql服务器" by="don"

#设置免密登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD yes

#将所需文件放到容器中
COPY /mysql/setup.sh /mysql/setup.sh #拷贝安装脚本
COPY /mysql/create_db.sql /mysql/create_db.sql #创建数据库
COPY /mysql/initial_data.sql /mysql/initial_data.sql #初始数据
COPY /mysql/privileges.sql /mysql/privileges.sql #设置密码和权限

#设置容器启动时执行的命令
CMD ["sh", "/mysql/setup.sh"]

三、构建MySql的Dockerfile

使用docker build命令构建刚才创建的Dockerfile文件,这里一定要注意最后面有个.--no-cache=true表示禁用缓存。

docker build -f Dockerfile -t loamen-mysql:5.7 --no-cache=true .

如果是在Windows环境下构建,可能会出现如下提示:

SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.

该提示表示Windows构建出来的拥有所有权限,如果不需要那么多可以使用-rwxr-xr-x修改,如果不需要修改权限可以忽略。

执行成功后可以通过docker images查看刚才生成的镜像,这里可以看到多了loamen-mysql的镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
loamen-mysql        5.7                 4da21faea397        2 minutes ago       449MB
mysql               5.7.30              9cfcce23593a        4 weeks ago         448MB

四、运行mysql容器

使用docker run命令来运行容器,这里使用了-v挂载本地卷,但没有使用-e MYSQL_ROOT_PASSWORD=123456来设置密码,是因为这里要使用空密码创建初始数据。

docker run --privileged=true --name loamen-mysql -p 3306:3306 -v /my/mysql/data:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -v /my/mysql/logs:/var/log/mysql -d loamen-mysql:5.7

运行好后使用docker ps来查看刚才创建的容器

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
bd285ecb867a        loamen-mysql:5.7    "docker-entrypoint.s…"   4 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   loamen-mysql

五、其他操作

进入容器bash,这里spaceon-mysql使用CONTAINER IDbd285ecb867a也可以。

docker exec -it spaceon-mysql /bin/bash

删除容器,-f表示强制删除,如果不强制删除可以使用docker stop先停止容器,-v表示连本地卷一起删除。

docker rm -f loamen-mysql -v

删除镜像

docker rmi loamen-mysql:5.7

六、脚本内容

setup.sh初始化运行脚本如下

#!/bin/bash
set -e

#查看mysql服务的状态,方便调试,这条语句可以删除
echo `service mysql status`

echo '1.启动mysql...'
#启动mysql
service mysql start
sleep 3

echo `service mysql status`
echo '2.创建数据库...'
mysql < /mysql/create_db.sql
sleep 3
echo '2.创建数据库完毕...'


echo '3.开始导入数据...'
mysql < /mysql/initial_data.sql
echo '3.导入数据完毕...'

echo '4.修改mysql权限...'
mysql < /mysql/privileges.sql
sleep 3
echo '4.权限修改完毕...'

#sleep 3
echo `service mysql status`
echo 'mysql容器启动完毕,且数据导入成功'

tail -f /dev/null

create_db脚本内容如下

USE mysql;
CREATE DATABASE IF NOT EXISTS spaceon_gms;

create_db.sql脚本内容如下

--使用默认数据库
USE mysql;
-- 创建一个名为loamen_demo的数据库
CREATE DATABASE IF NOT EXISTS loamen_demo;

initial_data.sql脚本内容如下

--使用默认数据库
--不要忘记初始化到哪个数据库
USE loamen_demo;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

--其他数据库初始化脚本
...

privileges.sql脚本内容如下

use mysql;
SELECT host, user FROM user;

-- 将数据库的权限授权给root用户,密码为123456:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456';

-- 刷新权限这一条命令一定要有:
flush privileges;

如果是Windows下创建的脚本文件,请使用utf-8编码,如果到Linux中运行依然乱码,可以使用如下命令进行转换

sed -i "s/\r//" create_db.sql

七、源码

https://github.com/loamen/dockerfile-templates

你可能感兴趣的:([Java学习笔记]MySql的Dockerfile编写)