美文网首页
[Java学习笔记]MySql的Dockerfile编写

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

作者: Loamen | 来源:发表于2020-07-13 18:29 被阅读0次

    一、什么是 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编写

          本文链接:https://www.haomeiwen.com/subject/icczcktx.html