Dockerfile部署mysql并初始化

2023-11-18

文件目录结构

在这里插入图片描述

Dockerfile

FROM centos:7

ADD jdk-8u261-linux-x64.tar.gz /usr/local
ADD check-mysql.sh /home/datasong/release/bin/
COPY mysql-5.1.72-linux-x86_64-glibc23.tar.gz  /home/datasong/release/resource/MySQL/
ADD datasong.sql /home/datasong/release/resource/MySQL/
RUN mkdir /home/datasong/release/plugin
RUN groupadd mysql
RUN useradd -r -g mysql
RUN mv /usr/local/jdk1.8.0_261 /usr/local/jdk

ENV JAVA_HOME=/usr/local/jdk
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
ENV PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


WORKDIR /home/datasong/release/bin
ENTRYPOINT [ "sh", "check-mysql.sh" ]

EXPOSE 3306

初始化脚本check-mysql.sh

#!/bin/sh
if [ ! "$1" ] 
	then mysql_port=3306 
else 
	mysql_port=$1
fi
mysql_tar_suffix="tar.gz"
DATASONG_HOME=/home/datasong/release
####################check if mysql installed#####################
mysql_install_path=${DATASONG_HOME}/plugin/mysql
mysql_tar_path=${DATASONG_HOME}/resource/mysql/

sql_file=${DATASONG_HOME}/resource/mysql/datasong.sql
echo "DATASONG_HOME=${DATASONG_HOME}"
if [ ! -d "${mysql_install_path}" ]; then #check if mysql folder exists in install path , if not, install 
    mysql_tar_file=`find ${DATASONG_HOME}/resource/mysql -name "*.${mysql_tar_suffix}"`
    for f in ${mysql_tar_file}
    do
        tar -zxf ${mysql_tar_file} -C ${mysql_tar_path} & #extract tar file in current path, turn to background
		b=''
		while true
		do
			printf "MySQL is installing:%-50s\r" $b 
			sleep 1
			b=#$b
			if [[ ! $(ps -ef | grep tar) =~ "${mysql_tar_path}" ]]; then  
				echo ""
				echo "MySQL install successful!"
				break
			fi  
		done
		
        mysql_install_folder=`echo ${mysql_tar_file} | sed 's/.tar.gz//g'` #delete suffix(.tar.gz) in folder name
        mv ${mysql_install_folder} ${mysql_install_path} #move mysql folder to install path 
		cp ${sql_file} ${mysql_install_path} #copy init .sql file to install path 
    done
	
	#sql_dst_file=${mysql_install_path}/datasong.sql 

	
    mysql_group=mysql
    mysql_user=mysql
    egrep "${mysql_group}" /etc/group >& /dev/null
    if [ $? -ne 0 ]
    then
        groupadd ${mysql_group}
    else
        echo "Group ${mysql_group} has already exist!"
    fi
 
    egrep "${mysql_user}" /etc/passwd >& /dev/null
    if [ $? -ne 0 ]
    then
        useradd -r -g ${mysql_group} ${mysql_user}
    else
        echo "User ${mysql_user} has already exist!"
    fi
	#mkdir ${mysql_install_path}/mysql-files
	#mkdir ${mysql_install_path}/data

    chown -R ${mysql_group}:${mysql_user} ${mysql_install_path}
	chown -R root ${mysql_install_path}
	chmod -R 777 ${mysql_install_path}

    ${mysql_install_path}/scripts/mysql_install_db --basedir=${mysql_install_path} --datadir=${mysql_install_path}/data --socket=${mysql_install_path}/mysql.sock --port=${mysql_port} --user=mysql  >& /dev/null

    ${mysql_install_path}/bin/mysqld --initialize-insecure --basedir=${mysql_install_path} --datadir=${mysql_install_path}/data --socket=${mysql_install_path}/mysql.sock --port=${mysql_port} --user=mysql  >& /dev/null
    ${mysql_install_path}/bin/mysql_ssl_rsa_setup --datadir=${mysql_install_path}/data --port=${mysql_port} >& /dev/null
	${mysql_install_path}/bin/mysqld --basedir=${mysql_install_path} --datadir=${mysql_install_path}/data --socket=${mysql_install_path}/mysql.sock --port=${mysql_port} --user=mysql & 
	
	b=''
    while true
    do
        printf "MySQL is starting:%-50s\r" $b 
        sleep 1
        b=#$b
        if [[ $(ps aux | grep mysql) =~ "--basedir=${mysql_install_path}" ]]; then  
            echo ""
            echo "MySQL start successful!"
            break
        fi  
    done
	

    mysql_login="root"
    mysql_pass="" 
    new_user_name="datasong"
    new_user_pass="iscas123"
    sql_createuser="CREATE USER '${new_user_name}' IDENTIFIED BY '${new_user_pass}';";
    sql_grant_local="GRANT ALL PRIVILEGES ON *.* TO '${new_user_name}'@'localhost' IDENTIFIED BY '${new_user_pass}' WITH GRANT OPTION;";
    sql_grant_remote="GRANT ALL PRIVILEGES ON *.* TO '${new_user_name}'@'%' IDENTIFIED BY '${new_user_pass}' WITH GRANT OPTION;";
    sql_flush="FLUSH PRIVILEGES;";
    sql_add="${sql_createuser}${sql_grant_remote}${sql_grant_local}${sql_flush}";
    ${mysql_install_path}/bin/mysql --default-character-set=utf8 --socket=${mysql_install_path}/mysql.sock --user=${mysql_login} --password=${mysql_pass} --port=${mysql_port} --execute="$sql_add";
	
    ${mysql_install_path}/bin/mysql --default-character-set=utf8 --socket=${mysql_install_path}/mysql.sock --user=$new_user_name --password=$new_user_pass --port=${mysql_port}  < ${mysql_install_path}/datasong.sql &
     sleep 10
fi

####################check if mysql running####################
if [[ $(ps aux | grep mysql) =~ "--basedir=${mysql_install_path}" ]]; then  
    echo "MySQL is running"
else
    ${mysql_install_path}/bin/mysqld --basedir=${mysql_install_path} --datadir=${mysql_install_path}/data --socket=${mysql_install_path}/mysql.sock --port=${mysql_port} --user=mysql &
	b=''
    while true
    do
        printf "MySQL is starting:%-50s\r" $b 
        sleep 1
        b=#$b
        if [[ $(ps aux | grep mysql) =~ "--basedir=${mysql_install_path}" ]]; then  
            echo ""
            echo "MySQL is start successful!"
            break
        fi  
    done
fi  

打包镜像

docker build -t datasong-mysql .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile部署mysql并初始化 的相关文章

  • Docker Toolbox (Windows):无效的卷规范

    配置 使用 Windows 10 Docker 工具箱 not原生 Docker 以便能够使用虚拟机 背景 有一个 Python 2 7 脚本应该运行 Docker 容器 代码如下所示 self docker containers run
  • 如何在 docker 容器中仅设置 python 2.7?

    我有节点应用程序 在一个用例中 我使用以下命令从节点调用 python 脚本python shell https www npmjs com package python shell 我正在尝试在 docker 上设置这个应用程序 我的 D
  • Dockerize 一个网络核心 Web api

    我正在尝试对 aspnetcore webapi 进行 dockerize 我按照这里的教程进行操作 https docs docker com engine examples dotnetcore https docs docker co
  • Docker-compose:npm 安装成功后卷中不存在 node_modules

    我有一个具有以下服务的应用程序 web 在端口 5000 上保存并运行 python 3 Flask Web 服务器 使用 sqlite3 worker 有一个index js文件是队列的工作人员 Web 服务器通过端口使用 json AP
  • 在 Windows 上使用 docker compose 进行卷绑定

    我最近在 Windows 10 上升级了 Docker Toolbox 现在我的卷挂载不再起作用 我已经尝试了一切 这是当前的挂载路径 volumes C Users Joey Desktop backend var www html 我收
  • Docker 中的 Airflow:如何将 DAG 添加到 Airflow?

    我想将 DAG 文件添加到 Airflow 它在 Ubuntu 上的 Docker 中运行 我用了以下git 存储库 https github com puckel docker airflow 包含配置和 docker 镜像的链接 当我跑
  • Docker 容器中的 LDAP 身份验证

    默认情况下 当Docker容器启动时 里面的用户是sudo I want 默认情况下将 sudo 用户锁定在容器中 在容器中使用 LDAP 身份验证而不是默认身份验证 当用户与映像一起提供时 或者在容器运行时由 sudo 用户创建 为此 我
  • 上下文更改后 Docker“协议不可用”

    我改变了我的码头环境 现在 当我运行任何 docker 命令时 我得到protocol not available 如果无法运行任何 docker 命令 如何更改回上下文 基本上我做了以下事情 I ran docker context li
  • 如何使用gunicorn和bokeh服务配置Nginx

    我想提供一个 Flask 应用程序 该应用程序使用本地网络服务器上的嵌入式散景服务 为了说明这一点 我使用了一个例子散景服务示例 https github com bokeh bokeh blob 0 12 11 examples howt
  • docker build --no-cache 是否构建不同的层?

    几个月前 我决定使用以下命令设置我的项目构建 docker 镜像的 CIno cacheflag 我认为最好不要冒险让 docker 使用旧的缓存层 我现在才意识到 我的图像各层的 sha 总是不同的 即使新构建的图像应该生成与之前构建的相
  • 我需要启用哪些权限才能使 Docker 卷正常工作?

    假设我有一个保存一些数据的 Docker 容器 我希望这些数据能够持续存在 如果容器被停止 删除 升级等 我仍然希望数据位于主机操作系统文件系统上的可访问位置 目前 我的解决方案是创建一个目录 srv service name在我的主机上
  • Docker 中的 Web api 无法连接到主机上的 SQL Server,并出现登录前握手错误

    首先有一些类似的问题 但我已经尝试了我能找到的所有建议 但似乎没有任何效果 如果你能找到我没有提到的 请评论 我会尝试一下 概要是我正在尝试将 Docker 容器中的 NET Core 3 1 Web api 连接到主机上的 SQL Ser
  • 在 docker 中根据更改重新启动 Flask 应用程序

    我正在使用 Flask script 来运行我的应用程序 if name main manager run 在 docker 中我有以下内容 CMD python manage py runserver h 0 0 0 0 p 5000 现
  • 针对容器优化操作系统的 GCP 云监控

    我在用着GCP计算引擎 with 容器优化操作系统 我启用了Logging and 监控就那个例子而言 日志记录和监控具有写权限 但总是显示不适用于代理在监控仪表板中 If I SSH在我的实例中并运行docker images然后我看到输
  • Docker 和 Eureka 与 Spring Boot 无法注册客户端

    我有一个使用 Spring Boot Docker Compose Eureka 的非常简单的演示 我的服务器在端口 8671 上运行 具有以下应用程序属性 server port 8761 eureka instance prefer i
  • 连接被拒绝:当uwsgi和nginx在不同容器中时

    我正在尝试设置两个 docker 容器 是的 无需 docker compose 分开 一个带有 nginx 另一个带有带有基本 Flask 应用程序的 uwsgi 我在 docker 内的同一网络中运行容器我的 nginx 配置已添加 链
  • Kubernetes - 尝试部署时“安装卷失败”

    我部署了第一个容器 我得到了信息 deployment apps frontarena ads deployment created 但后来我看到我的容器创建陷入等待状态 然后我看到日志使用kubectl describe pod fron
  • NSQ Docker Swarm

    我尝试在 Docker Swarm 中使用 NSQ 但没有成功 mhlg rpi nsq 是为 Raspberry Pi ARM7 板构建的 Docker 映像 如果作为普通 Docker 容器运行 我可以确认其工作正常 在 Docker
  • 适用于elasticsearch 7.0.1 和 kibana 7.0.1 的 docker-compose.yml

    我在 Windows 10 上将 Docker Desktop 与 Linux 容器结合使用 并希望通过 docker compose 文件启动最新版本的 elasticsearch 和 kibana 容器 使用 6 2 4 等旧版本时一切
  • 如何在 MacBook Pro 上的 Docker 容器内运行 tkinter?

    我正在尝试运行一个使用以下命令的 python GUI 应用程序tkinter我的 MacBook Pro 上的 docker 容器内的模块 所以我安装了XQuartz https www xquartz org 并跟随本教程 https

随机推荐

  • 训练自己的ai模型(三)学习笔记与项目实操(一些概念理解杂谈)

    ai模型大火 作为普通人 我也想做个自己的ai模型 训练自己的ai模型通常需要接下来的的六步 一 收集和准备数据集 需要收集和准备一个数据集 其中包含想要训练模型的数据 这可能需要一些数据清理和预处理 以确保数据集的质量和一致性 二 选择和
  • PTA——7-3 两个数的简单计算器

    输入格式 输入整数A 符号ch和整数B 输出格式 根据符号ch 在一行中输出A ch B的值 如果ch是 则输出A B的值 如果ch是 则输出A B的值 如果ch是 则输出A B的值 如果ch是 则输出A B的值 题目保证B不为0 并且结果
  • C++泛型编程:源起、实现与意义

    C 泛型编程 源起 实现与意义 为什么泛型泛型编程 Generic Programming 最初提出时的动机很简单直接 发明一种语言机制 能够帮助实现一个通用的标准容器库 所谓通用的标准容器库 就是要能够做到 比如用一个List类存放所有可
  • [Linux]日志文件已删掉磁盘空间不释放,不重启服务进程的解决方法

    Linux 日志文件已删掉磁盘空间不释放 不重启服务进程的解决方法 问题背景 服务进程启动后 后台会有写日志的操作 当服务进程还没停掉 日志就会一直在写 这时候手动删除日志 会造成日志在linux该目录下已经删除 但是磁盘空间不会被释放掉
  • C语言函数操作大全----(超详细)

    fopen 打开文件 相关函数 open fclose 表头文件 include
  • MAC电脑常用效率工具推荐

    作者主页 IT技术分享社区 作者简介 大家好 我是IT技术分享社区的博主 从事C Java开发九年 对数据库 C Java 前端 运维 电脑技巧等经验丰富 个人荣誉 数据库领域优质创作者 华为云享专家 阿里云专家博主 个人博客 IT技术分享
  • supervisor系列:3、配置文件

    supervisor系列 3 配置文件 文章目录 supervisor系列 3 配置文件 1 文件格式 1 1 环境变量 2 unix http server 段设置 2 1 unix http server 段的值 2 2 unix ht
  • VS中Qt中ui文件和生成.h文件问题

    vs中的ui的ui xxxx h头文件是由Qt通过编译生成 vs项目属性中配置环境调用Qt安装目录下bin目录下的uic exe来自动生成代码 如果移动工程目录 而之前又把相关的ui xxx h头文件添加到工程或移动其位置 那么再次修改ui
  • sketchup 255个su常用插件)_「教程」巧用Rhino和SU,做出你想要的地形效果

    Xiao素材 地形建模教程 本期精选 教你如何做好地形效果图 1 SU部分 地形效果 SU插件安装小教程 su软件是我们现在经常会使用到的一个软件 但是在我们作图的过程中会发现 很多情况下 相对于一些复杂的图形我们需要依赖相关的插件 比如
  • python递归函数代码_Python递归函数 二分查找算法实现解析

    一 初始递归 递归函数 在一个函数里在调用这个函数本身 递归的最大深度 998 正如你们刚刚看到的 递归函数如果不受到外力的阻止会一直执行下去 但是我们之前已经说过关于函数调用的问题 每一次函数调用都会产生一个属于它自己的名称空间 如果一直
  • Kubernetes + Dashboard 集群搭建

    1 环境说明 基于kubeadm工具部署k8s 集群 还有基于二进制的部署方式但是需要单独部署k8s的每个组件比较繁琐 kubeadm是 Kubernetes官 提供的 于快速部署Kubernetes集群的 具 基于Kubernetes v
  • OC中的分类与类扩展

    在OC中 对于已有的类进行扩展 我们有两种方式 1 在原始类的定义中 进行代码扩展 2 通过继承的方式 扩展子类 3 使用分类的方式 第一 二种方式不用多说 第三种方式则是OC中比较有特色的功能 分类允许我们在不更改类的原始代码的情况下 实
  • 接口设计之幂等性设计

    幂等性设计 今天我们来聊聊接口的幂等性设计 所谓幂等 就是任意多次执行所产生的影响均与一次执行的影响相同 幂等性接口是指可以使用相同参数重复执行 并能获得相同结果的接口 这里就不展开数学中的定义了 有兴趣的可以自行google 为什么接口需
  • 关于mysql_free_result和mysql_close的解惑

    之前用mysql的时候一直是在用短链接 调用mysql store result获取一次数据之后就直接调用 以下是代码片段 mysql free result m result mysql close m Database 但是有两个问题
  • 找个好用的录屏软件,怎么这么难?

    真的要被录屏软件给搞疯了 本来公司说要给新人做个培训视频 想着把视频录屏一下 然后简单的剪辑一下就可以了 可谁知道录屏软件坑这么多 弄来弄去头都秃了 不过在头秃了几天之后 终于让我发现了一个值得 私藏 的录屏软件 咱就说这是什么神仙软件 把
  • 编码器测速,获取实际速度

    本例程中使用的电机为带霍尔编码器的减速电机 电机由三部分组成 减速器 电机以及霍尔编码器 霍尔编码器工作原理 霍尔编码器通过电磁转换 将机械的位移转化为脉冲信号 并且输出A B两相的方波信号 A B两相脉冲信号相位相差90 通过检测规定时间
  • Android Studio快捷键从Mac OS改为Win

    原理将Mac的Control映射为Command Command映射为Option Option映射为control 这样与win的快捷键按键习惯应该相同 未长时间测试
  • iOS App上传到苹果应用市场构建版本的图文教程

    使用hbuilderx的h5 或uniapp框架写的前端 进行云打包ios应用 会生成一个ipa后缀的应用文件 这个文件是没有办法像安卓应用那样直接安装在手机上面的 需要上架到苹果应用商店 用户才能下载安装使用 因此 我们这篇文章讲详细介绍
  • 5G基础信令

    一 4 5G高层协议规范框架对比 4G 5G 36 300 LTE整体 38 300 NR整体 36 401 E URTAN整体架构 38 401 NG RAN整体架构 36 321 LTE MAC 38 321 NR MAC 36 322
  • Dockerfile部署mysql并初始化

    文件目录结构 Dockerfile FROM centos 7 ADD jdk 8u261 linux x64 tar gz usr local ADD check mysql sh home datasong release bin CO