使用nomad部署mysql
?以下是一個mysql的nomad job文件mysql.nomad,在此文件路徑執(zhí)行nomad run mysql.nomad文件名,即可
job "MySQL:5.7"{ //jobIDdatacenters=["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=1min_healthy_time="10s"healthy_deadline="3m"auto_revert=truecanary=0}group "MySQL"{count=1restart{attempts=10interval="5m"delay="25s"mode="delay"}ephemeral_disk{migrate = truesize=300sticky = true}task "mars-dev"{driver="docker"env{MYSQL_ROOT_PASSWORD="123456" //必須設(shè)置,管理員用戶root的密碼}config{image="hub.skyinno.com/google_containers/mysql:5.7.20"force_pull=trueport_map{db = 3306}volumes = ["docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/",]}template {data = <<EOHCREATE DATABASE dbwebappdb;CREATE USER 'dbwebapp'@'%' IDENTIFIED BY 'dbwebapp';GRANT ALL PRIVILEGES ON dbwebappdb.* TO 'dbwebapp'@'%';EOHdestination = "/docker-entrypoint-initdb.d/db.sql"}logs{max_files=10max_file_size=15}resources{cpu=500memory=512network{mbits=100port "db" {}}}}} }以上版本有一個需要說明的地方:
volumes = ["docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/", ]這是mysql dockerfile里規(guī)定的路徑映射目錄,后面的template會EOH一段sql腳本,并指定destination到這個目錄下,作用就是當(dāng)mysql鏡像啟動完畢后,會執(zhí)行這個腳本,這里的例子是創(chuàng)建一個數(shù)據(jù)庫dbwebappdb,并創(chuàng)建用戶dbwebapp,密碼為dbwebapp,并授權(quán)。
詳情見官網(wǎng)說明https://hub.docker.com/_/mysql/
其實(shí),還有一種更簡單的方式也可以創(chuàng)建數(shù)據(jù)庫和用戶名密碼,在模板的env里,必須設(shè)置MYSQL_ROOT_PASSWORD="123456" ,否則容器啟動報(bào)錯;同時還可以設(shè)置MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD,即初始數(shù)據(jù)庫,用戶名,密碼,而在template里就只用創(chuàng)建一些數(shù)據(jù)庫表等操作
env{MYSQL_ROOT_PASSWORD="123456"MYSQL_DATABASE="wordpress"MYSQL_USER="wordpress"MYSQL_PASSWORD="wordpress" }注意:mysql docker的數(shù)據(jù)文件存放有2種方式,一種是默認(rèn)的,在docker容器內(nèi),由docker來管理,缺點(diǎn)是路徑不好找,有些數(shù)據(jù)庫管理工具可能不方便使用,而且一旦docker容器刪除,數(shù)據(jù)就丟失了;還有一種方式,通過-v,將宿主機(jī)器目錄映射到docker內(nèi)部目錄,mysql數(shù)據(jù)文件存放到宿主機(jī)器目錄下,這樣數(shù)據(jù)不會丟失,設(shè)置方式如下:
volumes = ["docker-entrypoint-initdb.d/:/docker-entrypoint-initdb.d/","/mysql/mars-dev:/var/lib/mysql" ]"/mysql/mars-dev:/var/lib/mysql"即將宿主機(jī)器目錄/mysql/mars-dev映射到docker內(nèi)部目錄/var/lib/mysql,宿主機(jī)目錄/mysql/mars-dev如果不存在,則會自動生成;而docker內(nèi)部目錄/var/lib/mysql是mysql docker提供的默認(rèn)寫數(shù)據(jù)文件的目錄。
當(dāng)然,如果使用了宿主目錄映射,上面的template,MYSQL_DATABASE,MYSQL_USER,MYSQL_PASSWORD都不會生效。
參考資料:https://hub.docker.com/_/mysql/
? ? ? ? ? ? ? ? ??https://mysqlrelease.com/2017/12/hashicorp-nomad-and-app-deployment-with-mysql/
總結(jié)
以上是生活随笔為你收集整理的使用nomad部署mysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Docker中的mysql
- 下一篇: 不到 10 个提升逼格的 Redis 命