使用nomad部署mysql

19 篇文章 4 订阅

 以下是一个mysql的nomad job文件mysql.nomad,在此文件路径执行nomad run mysql.nomad文件名,即可

job "MySQL:5.7"{      //jobID
	datacenters=[
		"default"   
	]
	type="service"
	namespace="Mars-dev"
	constraint{
		attribute="${meta.app_id}"
		value="2"
	}
	constraint{
		attribute="${meta.env}"
		value="dev"
	}
	meta{
		_time="0"
	}
	update{
		max_parallel=1
		min_healthy_time="10s"
		healthy_deadline="3m"
		auto_revert=true
		canary=0
	}
	group "MySQL"{
		count=1
	
		restart{
			attempts=10
			interval="5m"
			delay="25s"
			mode="delay"
		}
	
		ephemeral_disk{
			migrate = true
			size=300
			sticky  = true
		}
		
		task "mars-dev"{
	
			driver="docker"
		  
			env{
				MYSQL_ROOT_PASSWORD="123456"    //必须设置,管理员用户root的密码
			}
		  
			config{
				image="hub.skyinno.com/google_containers/mysql:5.7.20"
			
				force_pull=true
			
				port_map{
					db = 3306
				}
			
				volumes = [
					"docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/",
				]
			
			}
				
			template {
				data = <<EOH
				CREATE DATABASE dbwebappdb;
				CREATE USER 'dbwebapp'@'%' IDENTIFIED BY 'dbwebapp';
				GRANT ALL PRIVILEGES ON dbwebappdb.* TO 'dbwebapp'@'%';
				EOH
					
				destination = "/docker-entrypoint-initdb.d/db.sql"
			}
					  
			logs{
				max_files=10
				max_file_size=15
			}
			resources{
				cpu=500
				memory=512
			
				network{
					mbits=100
			  
					port "db" {}
				}
			}
		}
	}
}

以上版本有一个需要说明的地方:

volumes = [
	"docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/",
]

这是mysql dockerfile里规定的路径映射目录,后面的template会EOH一段sql脚本,并指定destination到这个目录下,作用就是当mysql镜像启动完毕后,会执行这个脚本,这里的例子是创建一个数据库dbwebappdb,并创建用户dbwebapp,密码为dbwebapp,并授权。

详情见官网说明https://hub.docker.com/_/mysql/

其实,还有一种更简单的方式也可以创建数据库和用户名密码,在模板的env里,必须设置MYSQL_ROOT_PASSWORD="123456" ,否则容器启动报错;同时还可以设置MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD,即初始数据库,用户名,密码,而在template里就只用创建一些数据库表等操作

env{
   	MYSQL_ROOT_PASSWORD="123456"
	MYSQL_DATABASE="wordpress"
	MYSQL_USER="wordpress"
	MYSQL_PASSWORD="wordpress"
}

注意:mysql docker的数据文件存放有2种方式,一种是默认的,在docker容器内,由docker来管理,缺点是路径不好找,有些数据库管理工具可能不方便使用,而且一旦docker容器删除,数据就丢失了;还有一种方式,通过-v,将宿主机器目录映射到docker内部目录,mysql数据文件存放到宿主机器目录下,这样数据不会丢失,设置方式如下:

volumes = [
	"docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/",
	"/mysql/mars-dev:/var/lib/mysql"
]

"/mysql/mars-dev:/var/lib/mysql"即将宿主机器目录/mysql/mars-dev映射到docker内部目录/var/lib/mysql,宿主机目录/mysql/mars-dev如果不存在,则会自动生成;而docker内部目录/var/lib/mysql是mysql docker提供的默认写数据文件的目录。

当然,如果使用了宿主目录映射,上面的template,MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD都不会生效。

参考资料:https://hub.docker.com/_/mysql/

                  https://mysqlrelease.com/2017/12/hashicorp-nomad-and-app-deployment-with-mysql/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值