昨天已經把建構好的Docker image push到DockerHub了,今天就來使用Mesos來執行Docker Container。
在執行啟動Mesos的設定有點調整,指令如下:
啟動Mesos Master,指令如下
# mesos-master --work_dir=/tmp/mesos/master
啟動Mesos Slave,指令如下
# GOLOG_v=1 mesos-agent --master=192.168.1.223:5050 --isolation=docker/runtime,filesystem/linux --work_dir=/tmp/mesos/agent --image_providers=docker --executor_environment_variables="{}" --containerizers=docker,mesos
今天就使用marathon framework來啟動之前建構好的mysql docker image:
執行步驟如下:
1.啟動marathon framework:
在執行marathon framework之前需要先開啟zookeeper,然後JDK需要使用1.8以上的版本,啟動marathon指令如下:
# ./start --master 192.168.1.223:5050 --mesos_role marathon --mesos_authentication_principal ""
2.撰寫使用marathon framework啟動mysql docker container的設定檔
vi mysql.json
{
"id": "/mysql",
"cpus": 1,
"mem": 512,
"disk": 0,
"instances": 1,
"container": {
"type": "DOCKER",
"docker": {
"image": "jackyoh/mysql",
"network": "BRIDGE",
"portMappings": [
{
"containerPort": 3306,
"hostPort": 0,
"servicePort": 10000,
"protocol": "tcp"
}
],
"forcePullImage": false
}
}
}
"image": "jackyoh/mysql",就會從DockerHub pull下來
3.使用curl透過restful把執行設定送到marathon執行,指令如下
#curl -X POST -H "Content-Type: application/json" http://192.168.1.223:8080/v2/apps -d @mysql.json
執行完上面的指令之後就可以到Mesos WebUI看到執行結果:
marathon執行畫面如下:
使用mysql command測試連線mysq,但測試之前需要先看port是多少如下的畫面:
所以連線mysql的port 需要用31964
使用mysql command測試連線mysq,指令如下:
# mysql -h 192.168.1.223 -u root -p --port 31964
今天已經介紹了如何使用Mesos來執行mysql的docker container,其實像這種的執行方式還有許多議題可以研究,例如儲存資料的部份,像以上的做法如果把container砍掉之後資料就會不見,需要有一個永久層來儲存資料的部份,所以在Mesos上執行stateful applications需要注意資料的部份,一不小心資料就會不見了。
參考資料:
https://mesosphere.github.io/marathon/docs/external-volumes.html