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