Docker学习总结

简介

Docker是一种类似虚拟机的技术,通过docker,可以在一台云主机,物理机上运行完全隔离的独立环境,环境都是通过DockerFIle描述,发布成镜像后,通过镜像就可以在任意环境下
实现相同环境的运行,例如开发环境是mac下,有些编译内容和纯linux下不一定相同,到发布时可能需要重新编译。通过docker可以将应用和环境进行粘合,无论在什么主机条件下,应用运行的环境永远都是一样的。

除此之外,docker还可以让一台主机进行环境隔离,比较极端的例子,如果有不同应用需要运行在不同版本的同一SDK下,一般我们通过指定绝对路径来启动也可以达到目的。但是会很麻烦,后期维护也容易出错。
通过Docker可以让两个应用使用不同版本的镜像,可以在一台物理机上完美兼容,互不影响。

虽然现阶段看来,如果你的应用不是很复杂,都是单应用搭建,确实也不需要上docker,可能会让环境搭建变的复杂。
但是现在多主机应用模式越来越多,云计算已经是大势所趋,将应用打包成镜像进行发布,可以简单快捷的完整应用的部署,一切只需要安装了Docker和提供镜像即可。

通过Docker的上层部署系统如k8s,或者编排系统rancher可以将所有云主机进行统一管理,并且针对应用可以提供填空式的参数式部署,只需要在界面中输入关键参数,就可以完成应用部署。
可以极大的提高应用部署的效率,也避免了人工进行可能引入的错误。

安装

docker官方提供了安装脚本,执行命令
sudo wget -qO- https://get.docker.com/ | sh
就可以自动完成docker的安装

修改镜像源

docker的默认镜像都是从DockerHub上拉取的,因此速度也不会太快,可以将镜像源替换成国内的,这里推荐阿里云
docker配置阿里云镜像
免费的

配置文件为/etc/docker/daemon.json,如果没有就创建一个,加入如下字段

{
  "registry-mirrors": ["从阿里云获得的加速地址"]
}

配置是标准的json对,如果已经有外面的括号了,就只加入registry-mirrors项即可
修改完成后执行systemctl restart docker,重启完成后执行sudo docker info 可以看到修改是否成功

将来可能会遇到的问题

  • docker的最小运行单位是Container, 如果启动的时候没有指定 -rm 就算启动失败或者后面强行删除了也不会完全清除
    如果在学习过程中想完全重置环境,又不想重置镜像,可以执行sudo docker rm $(sudo docker ps -aq)
  • 一般范例中也会讲,一般会在容器的启动参数中加入 -i -t 这样方便调试,自己玩的时候也别忘了
  • 关于性能,如果你是在win或者mac下使用的docker,那就不要考虑所谓的性能问题,无论是win还是mac都是通过类似虚拟机的逻辑来实现的,所以最好自己装一个Ubuntu系统。
    win和mac只能算做是玩具,用来学习如何使用,和日常开发。
  • 关于环境保存,如果你要下次环境运行的结果进行保存,那么最好进行硬盘映射,通过-v参数
  • mac和win下的网络模式同样会因为是基于模拟器的运行无法使用主机网络,只能使用桥接,所以遇到了网络问题也不用太纠结。

推荐后续的学习

  • DockerFile是docker的基石,当然我们可以直接用现成构建好的镜像,但是学会怎么编写DockerFile和用DOckerFile来制作一个镜像是很有必要的,以erlang为例,可以看下官方镜像的DockerFile的编写方法来学习erlang的官方镜像信息
  • 通过编排引擎可以将Docker的使用完全可视化,推荐初学的话使用rancher1.0+Cattle, Cattle的编排相对简单,在mac下也可以兼容
  • k8s是当前比较流行的容器编排引擎,因为他提供的功能多,对应的学习难度也比较大,但是如果想使用Rancher2.0就必须了解k8s的基础逻辑才行
  • 关于Rancher,Rancher并不是一个编排引擎,他只是一个工具,让需要参数化的复杂的应用部署变得可控,通过编写应用模板,可以将应用的部署概括到几个关键参数的填充就可以,如果你熟悉了k8s,那么rancher对你就会相对简单的多。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章