一个开源的应用容器引擎,能够用来打包程序,能够包入依赖环境,这样只须要提供docker image便可,相似于虚拟机,可是更轻量级。git
几个概念:github
Paas,platform as a service,Caas container as a service。docker
镜像:文件的层次结构以及包含如何运行容器的源数据,相似虚拟机中安装系统的iso文件。json
容器:从镜像建立的运行实例,能够被启动、开始、中止、删除。 相似于安装好的虚拟机系统。浏览器
仓库:存放镜像的仓所,仓库注册服务器上有多个仓库,每一个仓库有多个镜像,每一个镜像有多个tab。和git作类比的话,dockerhub相似github,里面有不少项目,项目相似于镜像,每一个项目有屡次提交,对应镜像的多个tag安全
1,实现应用隔离,多个应用可能会相互影响,经过使用docker可使相互分离,好比搭建禅道系统会用到lnamp,而其余的一些也会用到,虽然经过配置也能分割【目前现状,可是不够直观,并且conf文件写的比较乱,多是水平差,不过不想花太多精力在这个上面,毕竟配置不是目的】,可是使用docker会更方便整洁,好比本地81端口提供A服务,82端口提供B服务,只须要ngix中配置转发便可。bash
2,方便管理,进行一些实验的时候,老是得记录当前的一些东西,一旦实验失败还须要还原,若是使用docker,只须要根据须要commit备份便可,若是失败了,从新加载以前的image继续。服务器
3,方便迁移,在任意一台电脑上,不管是服务器仍是本地,进行实验测试,完成后发布只须要将对应的image移过去便可,以前则是在本地作一遍,好了再在server上作一遍,虽然说熟能生巧,但是浪费时间,并且没必要要,毕竟根本目的是开发某个功能,不是为了部署和维护。学习
4,体积小。以前有用过虚拟机,利用快照功能备份,可是文件太大了,难以经过U盘移动拷贝,docker image通常几十兆到一两百兆,大的也才一个多G,很轻易能够经过U盘拷贝。测试
5,镜像多,DockerHub上有不少公开image,只须要找到合适的镜像,在上面进行修改便可。
6,占用资源少,若是想要虚拟机流畅运行,至少2G或者4G的内容,16G顶多开四五个虚拟机,而docker能够运行不少个。
毕竟只是大概的了解了docker,看书中介绍有提到安全性等问题,根据须要决定是否使用,本身目前只是为了作一些实验学习,因此采用。不过以前初次接触docker的时候,为了搭建一个服务,一直没成功,因此直接下了别人的image,结果运行后虽然能实现目的,可是不知道怎么停下来,搜索百度,怎么都停不下来,最终直接删除了文件,因为docker是封装好的,若是既能知足需求,同时悄悄的作一些其余事情,也是很难发现的,不想github同样,直接提供源码,若是有后门就有可能被人发现,因此docker最好下载可信度高的,或者直接本身从头开始搭建。
docker须要管理员权限运行,下面省略sudo
man docker会给出文档说明
docker 或者docker /? 或者docker --help 给出帮助文档
为了下载dockerhub的image,首先须要在dockerhub上注册。
docker login //进行登陆,用户名不带邮箱@以及后面的部分
登陆成后能够在dockerhub上搜索下载
docker search XXX //以XXX为关键字在dockerhub上搜索
docker pull AAA:BBB //AAA是image的名字,BBB是tag,若是不指定,则为latest,即下载最新的image
下载后本地就有了镜像
docker images //查看本地的docker
会列出REPOSITORY TAG IMAGEID CREATED SIZE等信息
docker ps // 查看运行中的container
会列出CONTAINERID IMAGE COMMAND CREATED STATUS PORTS等信息
docker start/stop/restart CONTAINERID //中止某个container,能够只输入部分,只要可以作出区分便可,好比container少的时候只输入一两位就够了
docker port CONTAINERID //查看该container port映射关系
docker run 【选项】 IMAGE 【command args】 //从某个镜像启动container,若是本地没有会自动下载
docker commit CONTAINERID repository:tag //当在docker内作出某些修改后,能够用这个命令建立新的image,相似虚拟机的快照功能
docker exec //进入某个container内,如docker exec -it /bin/bash
docker rmi imageid //删除镜像
之因此搭建私有dockerhub,主要由于是要作的事情都是具体的针对我的的,若是提交到dockerhub上一来浪费公共资源,二来可能不经意间泄露我的信息,并且鉴于前面提到的备份功能,可能会频繁的commit,而私有dockerhub有在本地搭建,能够提升效率。
因为对docker还处于简单使用的阶段,就直接使用了别人作好的image。
使用sudo docker login,登陆
sudo docker run -d -p 5000:5000 registry,自动下载并启动registry 容器,经过5000端口映射到container内的5000端口
此时能够经过浏览器访问本地的5000端口XXX:5000/v2/
须要参照http://www.javashuo.com/article/p-cxczemjo-md.html修改/etc/docker/daemon.json文件,若是不存在则建立一个:
{ "insecure-registries":["myregistry.example.com:5000"] }
重启
sudo /etc/init.d/docker restart
而后下载镜像,好比jmoger/gitblit
git docker pull jmoger/gitblit
给这个image打上tag,获得一个新的image:
sudo docker tag jmoger/gitblit 192.168.50.186:5000/gitblit //根据时间状况设置ip
而后就能够提交到本身的私有dockerhub上了
sudo docker push 192.168.50.186:5000/gitblit
能够在docker内进行开发,而后用这种方式同步开发环境。好比作禅道系统的二次开发,在公司内作了一部分,docker提交到本身的dockerhub上,回去后pull下来能够继续作,不管code仍是环境都彻底同样。若是经过git同步code,还须要确保两边有一样的环境,若是经过虚拟机同步,导出导入虚拟机须要很多时间,并且虚拟机须要配置一些东西,安装必要的软件以后未必可以经过U盘携带,并且读写十几G甚至几十G的内容也须要很多时间。
参考资料:
1.docker技术入门与实战
2.docker入门白皮书