MySql 的 Dockerfile 编写

MySql的Dockerfile编写

一、什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

这里不讲 Dockerfile 的指令,可自行百度。

二、创建 MySql 的 Dockerfile

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

#创建一个基于5.7.30版本的MySqlFROM mysql:5.7.30 
MAINTAINER donEXPOSE 3306LABEL 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             SIZEloamen-mysql        5.7                 4da21faea397        2 minutes ago       449MBmysql               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                               NAMESbd285ecb867a        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/bashset -e
#查看mysql服务的状态,方便调试,这条语句可以删除echo `service mysql status`
echo '1.启动mysql...'#启动mysqlservice mysql startsleep 3
echo `service mysql status`echo '2.创建数据库...'mysql < /mysql/create_db.sqlsleep 3echo '2.创建数据库完毕...'

echo '3.开始导入数据...'mysql < /mysql/initial_data.sqlecho '3.导入数据完毕...'
echo '4.修改mysql权限...'mysql < /mysql/privileges.sqlsleep 3echo '4.权限修改完毕...'
#sleep 3echo `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

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值