docker详解

容器虚拟化–docker
核心概念
  1. 镜像
    是一个只读的模板,类似于安装系统用到的那个iso文件,我们通过镜像来完成各种应用的部署。

  2. docker容器
    镜像类似于操作系统,而容器类似于虚拟机本身。它可以被启动、开始、停止、删除等操作,每个容器都是相互隔离的。

  3. docker仓库
    存放镜像的一个场所,仓库分为公开仓库和私有仓库。 最大的公开仓库是hub.docker.com,国内公开仓库http://dockerpool.com/

安装

centos6(6.5之前版本需要升级一下 yum update )

1
2
yum install -y epel-release
yum install -y docker-io

centos7

1
yum install -y docker

启动docker

1
/etc/init.d/docker start

镜像管理
1
2
3
4
5
6
7
8
9
docker pull  centos   //从docker.com获取centos镜像,如果太慢,直接做个加速http://www.apelearn.com/bbs/thread-15126-1-1.html
docker images //查看本地都有哪些镜像
docker tag centos graped123 //为centos镜像设置标签为graped123,再使用docker images查看会多出来一行,改行的image id和centos的一样
docker search (image-name) //从docker仓库搜索docker镜像,后面是关键词
docker run -t -i centos /bin/bash //用下载到的镜像开启容器,-i表示让容器的标准输入打开,-t表示分配一个伪终端,要把-i -t 放到镜像名字前面
当该镜像发生修改后,我们可以把该镜像提交重新生成一个新版本进行在本地。
docker ps //查看运行的容器
docker rmi centos //用来删除指定镜像, 其中后面的参数可以是tag,如果是tag时,实际上是删除该tag,只要该镜像还有其他tag,就不会删除该镜像。当后面的参数为镜像ID时,则会彻底删除整个镜像,连通所有标签一同删除
docker ps -a //查看所有容器,包括已经退出的。

创建镜像-基于已有镜像的容器创建
运行docker run后,进入到该容器中

1
docker exec -it f68 /bin/bash

我们做一些变更,比如安装一些东西,然后针对这个容器进行创建新的镜像

1
2
3
docker commit -m "change somth"  -a "somebody info"  image_id 
#例如:
ocker commit -m "install httpd" -a "Graped" 2c74d574293f graped/centos

这个命令有点像svn的提交,-m 加一些改动信息,-a 指定作者相关信息 2c74d这一串为容器id,再后面为新镜像的名字。

创建镜像-基于本地模板导入
模块获取,可以直接在网上下载一个模块 http://openvz.org/Download/templates/precreated 可惜速度并不快,假如我们下载了一个centos的模板 centos-5-x86.tar.gz 那么导入该镜像的命令为:

1
cat centos-6-x86_64-minimal.tar.gz |docker import - centos-6-x86_64

把现有镜像,导出为一个文件:

1
docker save -o centos_with_net.tar graped/centos

我们还可以用该文件恢复本地镜像:

1
2
docker load --input centos_net.tar  #或者
docker load < centos_net.tar

上传镜像

1
docker push image_name