设为首页 收藏本站
查看: 1285|回复: 0

[经验分享] 初试docker以及搭建mysql on docker

[复制链接]

尚未签到

发表于 2018-1-6 16:05:35 | 显示全部楼层 |阅读模式
  前一阵阅读了google的borg论文,在最后的related works和总结中发现了kubernetes。从论文中了解的kubernetes这个东西很有意思,按照论文所说,它的实现有希望解决an entire multi-job service的统一调度,这个对于目前的调度系统算是一个难题了。当前即使是Borg这样成熟的分布式系统,能够解决production任务(gmail等长运行的service)和batch任务的同时运行,但是依旧无法解决multi-job service的调度问题,对于整个service来讲,还是必须走多次调度才可以执行完成,这对于用户的体验并不友好,这个问题类似于spark的DAGScheduler和传统Hadoop的调度的区别,spark可以根据RDD的dependency关系来判断上下游关系,通过lazy的方式构造一个有向无环图进行处理,作为一个普通用户,我可以更灵活的构造多个Batch任务在一个spark的Application中,这样可以降低我的等待时间可提高编程灵活性,但是spark也只是支持多batch任务的DAG,对于其他任务,如production,流处理任务之类的结合也是毫无办法。如果kubernetes真的能够完美解决那这个系统肯定是未来的主流了。当然kubernetes是google borg的原班人马打造,自身高素质的运维经验会给k8s带来更多的技术支持,并且相比于borg还加入了每个container独立IP避免端口号冲突,强权限用户在线调试对其他用户的影响也有所改进。光看论文可以说是非常棒的系统。
  嘛,所以稍微了解了一下k8s,发现是基于docker做的,docker本身不是很熟,当年还曾经把docker和yarn的container搞混,只能说还是得从头开始学习docker才行。
  学习的第一步自然是先学会使用,根据官网的教程,我们可以简化为以下几个步骤:
  

#获取curl  

sudo apt-get install curl  
#安装docker
  
curl
-fsSL https://get.docker.com/ | sh  
#跑hello-world
  
docker run hello-world
  #看一看本地image镜像
  docker images
  #看一看本地container
  docker ps -a -q
  #删除container
  docker rm $(docker ps -a -q)
  

  看起来使用还是挺简单的,这里的hello-world程序不是在本地,是从hub上同步下来的image镜像。下面介绍了一些从远程hub上pull image的方法。我比较关心的是build your own image这点,首先创建一个Dockerfile:
  

FROM docker/whalesay:latest  
RUN apt
-get -y update && apt-get install -y fortunes  
CMD
/usr/games/fortune -a | cowsay  

  然后使用docker build -t name .命令来构建一个image,在这里,FROM是源镜像,如构建mysql可以使用FROM ubuntu:14.04来指定操作系统,RUN是跑的一些shell命令,我们能通过这些命令来在image持久化一些操作。CMD则是docker run时执行的命令。
  到此example学习完毕,自己尝试下构建mysql on docker。
  构建dockerfile:
  

FROM ubuntu:14.04  
MAINTAINER gaoze
  
RUN apt
-get update  
RUN apt
-get -y install mysql-server  
EXPOSE
3306  
CMD [
"/usr/bin/mysqld_safe"]  

  执行docker build,再执行docker run,发现无法远程访问,虽然暴露了3306接口但是mysql没设置权限。那么我们加入远程访问的权限再试试:
  

FROM ubuntu:14.04  
MAINTAINER gaoze
  
RUN apt
-get update  
RUN apt
-get -y install mysql-server  
RUN
/etc/init.d/mysql start \  

&& mysql -uroot -e "grant all privileges on *.* to 'root'@'%'>
&& mysql -uroot -e "grant all privileges on *.* to 'root'@'localhost'>
  
EXPOSE
3306  
CMD [
"/usr/bin/mysqld_safe"]  

  由于安装时是apt-get -y的,我们使用用户root,没密码,mysql -e 操作执行grant all privileges 操作。并将密码设置为1。
  build再run之后依旧无法访问。。。但是使用命令:
  

docker run -i -t docker-mysql /bin/bash  

  之后发现本地修改确实成功了。于是决定去看看hub上的mysql官方给的Dockerfile是如何做的发现了这个:
  

# comment out a few problematic configuration values  
# don
't reverse lookup hostnames, they are usually another container  
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
  
&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
  
&& mv /tmp/my.cnf /etc/mysql/my.cnf
  

  shell操作不好,我是没看懂这个。。于是去查了查,首先第一句话是sed操作,这里是在文件中将bind-address和log前面都加上#将其变为注释。第二步,在mysqld启动参数中加入了跳过DNS检测的部分。这段shell的意义就是保证远程连接并关闭DNS解析,提高mysql本身的连接性能。
  

  -i[SUFFIX], --in-place[=SUFFIX]  
edit files
in place (makes backup if SUFFIX supplied)  

  
在这里
-i代表直接修改文件内容,大E没找到什么意思  

/^reg/replace/代表将reg开头的行替换为replace  

  于是,修改后的Dockerfile为这样:
  

FROM ubuntu:14.04  
MAINTAINER gaoze
  
#RUN apt
-get update  
RUN apt
-get -y install mysql-server  
RUN
/etc/init.d/mysql start \  

&& mysql -uroot -e "grant all privileges on *.* to 'root'@'%'>
&& mysql -uroot -e "grant all privileges on *.* to 'root'@'localhost'>
  
RUN
sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \  

&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \  

&& mv /tmp/my.cnf /etc/mysql/my.cnf  

  
EXPOSE
3306  
CMD [
"/usr/bin/mysqld_safe"]  

  ok。接下来是执行:
  

#shell下执行命令,指定docker image的名字为docker-mysql  
docker build
-t docker-mysql .  

  
#启动这个image,
-d代表后台执行,-p代表端口映射  
docker run
-d -p 50001:3306 docker-mysql  

  
#让我们访问mysql试试,先看看container的运行状况
  
docker
ps  

  
#发现port写的是
0.0.0.0:50001 -> 3306/tcp  
mysql
-h 0.0.0.0 -P 50001 -uroot -p1  

  
ok,可以访问了,由于0.
0.0.0是localhost(虽然hosts中已经屏蔽了,然而还是可以访问本地),试试mysql -h ${本机IP地址} -P 50001 -uroot -p1。那么,这样便创建了一个可用的docker image  

  目前,大家更推荐使用Dockerfile来创建image,而不是命令行修改container再固化成为image。
  最近有些忙,学习进度不佳,过一段再写吧

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-432264-1-1.html 上篇帖子: Play with docker 1.12 下篇帖子: biglittleant
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表