美文网首页
docker基于mysql:5.7构建镜像并初始化脚本

docker基于mysql:5.7构建镜像并初始化脚本

作者: Miraitowa_718e | 来源:发表于2021-07-23 20:01 被阅读0次

    场景:由于公司项目需要部署到内网环境,并解决手动部署慢的问题,才使用docker容器虚拟化技术。

    需求:安装人员只需要执行一个脚本,即可完成mysql数据库安装,并将mysql数据持久化到磁盘中。

    遇到的问题:内网环境,安装docker
    解决方式:参考 https://segmentfault.com/a/1190000022982415

    一、开始构建(编写Dockerfile)

    #定义基础镜像源
    FROM daocloud.io/library/mysql:5.7
    #作者
    MAINTAINER Lsy
    
    #工作目录
    ENV WORK_PATH /usr/local/work
    
    #执行目录
    ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
    
    #定义初始化sql名称顺序
    ENV FILE_0 psp.sql
    ENV FILE_1 v1.1.0.sql
    ENV FILE_2 v1.1.1.sql
    ENV FILE_3 v1.2.0.sql
    ENV FILE_4 v1.2.1.sql
    ENV FILE_5 v1.2.4.sql
    ENV FILE_6 v1.2.5.sql
    ENV FILE_7 v1.3.0.sql
    ENV FILE_8 v1.3.1.sql
    ENV FILE_9 v1.3.2.sql
    ENV FILE_10 v1.3.3.sql
    ENV FILE_11 v1.4.0.sql
    ENV FILE_12 v1.4.1.sql
    ENV FILE_13 v1.4.2.sql
    ENV FILE_14 v1.4.3.sql
    
    #初始化脚本
    ENV INSTALL_DATA_SHELL install_data.sh
    #创建工作目录
    RUN mkdir -p $WORK_PATH
    
    #移动脚本
    COPY ./$FILE_0 $WORK_PATH/
    COPY ./$FILE_1 $WORK_PATH/
    COPY ./$FILE_2 $WORK_PATH/
    COPY ./$FILE_3 $WORK_PATH/
    COPY ./$FILE_4 $WORK_PATH/
    COPY ./$FILE_5 $WORK_PATH/
    COPY ./$FILE_6 $WORK_PATH/
    COPY ./$FILE_7 $WORK_PATH/
    COPY ./$FILE_8 $WORK_PATH/
    COPY ./$FILE_9 $WORK_PATH/
    COPY ./$FILE_10 $WORK_PATH/
    COPY ./$FILE_11 $WORK_PATH/
    COPY ./$FILE_12 $WORK_PATH/
    COPY ./$FILE_13 $WORK_PATH/
    COPY ./$FILE_14 $WORK_PATH/
    
    COPY ./$INSTALL_DATA_SHELL $AUTO_RUN_DIR/
    #指定开放端口
    EXPOSE 3306
    #赋予执行权限
    RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_DATA_SHELL
    

    二、构建

     #切换到Dockerfile所在目录
    docker build -t psp-mysql:1.0 . 
    #psp-mysql 镜像名称
    #1.0  tag
    # . 代表本次执行的上下文路径,需要copy的文件需要与Dockerfile同级目录
    #查看是否构建完成
    docker images
    
    image.png

    三、运行

    docker run --privileged=true  -itd --name psp-mysql -p 3306:3306 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/var/log/mysql  -v $PWD/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 psp-mysql:1.0
    # --privileged=true 获得psp-mysql内的root权限
    # -i 即使没有连接,也要保持标准输入保持打开状态,一般与 -t 连用
    # -t 分配一个伪tty,一般与 -i 连用
    # -d 在后台运行容器,并且打印容器id
    # --name 启动容器名称
    # -p 指定端口映射
    # -v 挂载宿主机目录
    # -e 传递环境变量
    # psp-mysql:1.0 启动镜像名称:tag
    

    四、验证数据脚本是否成功初始化(psp)


    image.png
    image.png

    五、自动化执行脚本(init_mysql.sh)

    #!/bin/bash
    #lsy
    #psp-mysql 1.0
    c_yellow="\e[1;33m"
    c_red="\e[1;31m"
    c_end="\e[0m"
    systemctl stop firewalld
    echo "开始进行psp-mysql初始化安装....."
    #验证docker是否已安装
    docker -v
    if [ $? -eq 0 ]; then
       echo "docker已安装,跳过安装...."
       break
    else
       echo "docker未安装,开始安装...."
       cd /usr/local/psp-mysql/
       sh init_docker.sh docker-18.06.3-ce.tgz
       systemctl status docker
        if [ $? -eq 0 ]; then
          echo "docker安装成功...."
          break
        else
          echo "docker安装失败,请联系管理员...."
          exit 1
          break
        fi
       break
    fi
    mkdir -p /usr/local/mysql/data
    mkdir -p /usr/local/mysql/conf
    mkdir -p /usr/local/mysql/logs
    cd /usr/local/psp-mysql
    docker load < psp-mysql.tar
    cd /usr/local/mysql
    mv /usr/local/psp-mysql/my.cnf /usr/local/mysql/conf
    docker run --privileged=true  -itd --name psp-mysql -p 3306:3306 -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/var/log/mysql  -v $PWD/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 psp-mysql:1.0
    

    相关文章

      网友评论

          本文标题:docker基于mysql:5.7构建镜像并初始化脚本

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