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

2021-07-23  本文已影响0人  Miraitowa_718e

场景:由于公司项目需要部署到内网环境,并解决手动部署慢的问题,才使用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
上一篇下一篇

猜你喜欢

热点阅读