CentOS系统下docker的安装配置及使用详解
发布时间:2014-11-19来源:服务器之家
2 docker特性
文件系统隔离:每个进程容器运行在完全独立的根文件系统里。
资源隔离:可以使用cgroup为每个进程容器分配不同的系统资源,例如cpu和内存。
网络隔离:每个进程容器运行在自己的网络命名空间里,拥有自己的虚拟接口和IP地址。
写时复制:采用写时复制方式创建根文件系统,这让部署变得极其快捷,并且节省内存和硬盘空间。
日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
变更管理:容器文件系统的变更可以提交到新的映像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。
交互式Shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
3 两个基础概念images与container
Container和Image 在Docker的世界里,Image是指一个只读的层(Layer),这里的层是AUFS里的概念,最直观的方式就是看一下docker官方给出的图:
Docker使用了一种叫AUFS的文件系统,这种文件系统可以让你一层一层地叠加修改你的文件,最底下的文件系统是只读的,如果需要修改文件,AUFS会增加一个可写的层(Layer),这样有很多好处,例如不同的Container可以共享底层的只读文件系统(同一个Kernel),使得你可以跑N多个Container而不至于你的硬盘被挤爆了!这个只读的层就是Image!而如你所看到的,一个可写的层就是Container。
那Image和Container的区别是什么?很简单,他们的区别仅仅是一个是只读的层,一个是可写的层,你可以使用docker commit 命令,将你的Container变成一个Image,也就是提交你所运行的Container的修改内容,变成一个新的只读的Image,这非常类似于git commit命令。
4 docker安装与启动
安装docker
@H_403_26@[root@localhost/]#yum-yinstalldocker-io @H_403_26@ @H_403_26@更改配置文件
@H_403_26@[root@localhost/]#vi/etc/sysconfig/docker @H_403_26@ other-args列更改为:other_args="--exec-driver=lxc --selinux-enabled"启动docker服务
@H_403_26@[root@localhost/]#servicedockerstart @H_403_26@Startingcgconfigservice:[OK] @H_403_26@Startingdocker:[OK] @H_403_26@ 将docker加入开机启动 @H_403_26@[root@localhost/]#chkconfigdockeron基本信息查看
docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等
@H_403_26@[root@localhost/]#dockerversion @H_403_26@Clientversion:1.0.0 @H_403_26@ClientAPIversion:1.12 @H_403_26@Goversion(client):go1.2.2 @H_403_26@Gitcommit(client):63fe64c/1.0.0 @H_403_26@Serverversion:1.0.0 @H_403_26@ServerAPIversion:1.12 @H_403_26@Goversion(server):go1.2.2 @H_403_26@Gitcommit(server):63fe64c/1.0.0 @H_403_26@ docker info : 查看系统(docker)层面信息,包括管理的images,containers数等 @H_403_26@[root@localhost/]#dockerinfo @H_403_26@Containers:16 @H_403_26@Images:40 @H_403_26@StorageDriver:devicemapper @H_403_26@PoolName:docker-253:0-1183580-pool @H_403_26@Datafile:/var/lib/docker/devicemapper/devicemapper/data @H_403_26@Metadatafile:/var/lib/docker/devicemapper/devicemapper/Metadata @H_403_26@DataSpaceUsed:2180.4Mb @H_403_26@DataSpaceTotal:102400.0Mb @H_403_26@MetadataSpaceUsed:3.4Mb @H_403_26@MetadataSpaceTotal:2048.0Mb @H_403_26@ExecutionDriver:lxc-0.9.0 @H_403_26@KernelVersion:2.6.32-431.el6.x86_645 镜像的获取与容器的使用
镜像可以看作是包含有某些软件的容器系统,比如ubuntu就是一个官方的基础镜像,很多镜像都是基于这个镜像“衍生”,该镜像包含基本的ubuntu系统。再比如,hipache是一个官方的镜像容器,运行后可以支持http和websocket的代理服务,而这个镜像本身又基于ubuntu。
搜索镜像
docker search <image>:在docker index中搜索image
下载镜像
docker pull <image> :从docker registry server 中下拉image
@H_403_26@[root@localhost/]#dockerpullchug/ubuntu12.10x64查看镜像
docker images: 列出images
docker images -a :列出所有的images(包含历史)
docker images --tree:显示镜像的所有层(layer)
docker rmi <image ID>: 删除一个或多个image
@H_403_26@[root@localhost/]#dockerimages @H_403_26@REPOSITORYTAGIMAGEIDCREATEDVIRTUALSIZE @H_403_26@chug/ubuntu12.10x64latest0b96c14dafcd4monthsago270.3MB @H_403_26@[root@localhost/]#dockerimages-a @H_403_26@<none><none>31edfed3bb884monthsago175.8MB @H_403_26@[root@localhost/]#dockerimages--tree @H_403_26@Warning:'--tree'isdeprecated,itwillberemovedsoon.Seeusage. @H_403_26@└─31edfed3bb88VirtualSize:175.8MB @H_403_26@└─0b96c14dafcdVirtualSize:270.3MBTags:chug/ubuntu12.10x64:latest @H_403_26@[root@localhost/]#dockerrmi<imageID>....使用镜像创建容器 @H_403_26@[root@localhost/]#dockerrunchug/ubuntu12.10x64/bin/echohelloworld @H_403_26@helloworld @H_403_26@ 交互式运行 @H_403_26@[root@localhost/]#dockerrun-i-tchug/ubuntu12.10x64/bin/bash @H_403_26@root@2161509ff65e:/#
查看容器
docker ps :列出当前所有正在运行的container
docker ps -l :列出最近一次启动的container
docker ps -a :列出所有的container(包含历史,即运行过的container)
docker ps -q :列出最近一次运行的container ID
再次启动容器
docker start/stop/restart <container> :开启/停止/重启container
docker start [container_id] :再次运行某个container (包括历史container)
docker attach [container_id] :连接一个正在运行的container实例(即实例必须为start状态,可以多个窗口同时attach 一个container实例)
docker start -i <container> :启动一个container并进入交互模式(相当于先start,在attach)
docker run -i -t <image> /bin/bash :使用image创建container并进入交互模式,login shell是/bin/bash
docker run -i -t -p <host_port:contain_port> :映射 HOST 端口到容器,方便外部访问容器内服务,host_port 可以省略,省略表示把 container_port 映射到一个动态端口。
注:使用start是启动已经创建过得container,使用run则通过image开启一个新的container。
删除容器
docker rm <container...> :删除一个或多个container
docker rm `docker ps -a -q` :删除所有的container
docker ps -a -q | xargs docker rm :同上,删除所有的container
6 持久化容器与镜像
6.1 通过容器生成新的镜像
运行中的镜像称为容器。你可以修改容器(比如删除一个文件),但这些修改不会影响到镜像。不过,你使用docker commit <container-id> <image-name>命令可以把一个正在运行的容器变成一个新的镜像。
docker commit <container> [repo:tag] 将一个container固化为一个新的image,后面的repo:tag可选。
@H_403_26@[root@localhost/]#dockercommitd0fd23b8d3acchug/ubuntu12.10x64_2 @H_403_26@daa11948e23d970c18ad89c9e5d8972157fb6f0733f4742db04219b9bb6d063b @H_403_26@chug/ubuntu12.10x64_2latestdaa11948e23d6secondsago270.3MB6.2 持久化容器
export命令用于持久化容器
docker export <CONTAINER ID> > /tmp/export.tar
6.3 持久化镜像
Save命令用于持久化镜像
docker save 镜像ID > /tmp/save.tar
6.4 导入持久化container
删除container2161509ff65e
导入export.tar文件
@H_403_26@[root@localhost/]#cat/tmp/export.tar|dockerimport-export:latest @H_403_26@af19a55ff0745fb0a68655392d6d7653c29460d22d916814208bbb9626183aaa @H_403_26@exportlatestaf19a55ff07434secondsago270.3MB @H_403_26@chug/ubuntu12.10x64_2latestdaa11948e23d20minutesago270.3MB6.5 导入持久化image
删除imagedaa11948e23d
导入save.tar文件
@H_403_26@[root@localhost/]#dockerload</tmp/save.tar @H_403_26@ @H_403_26@ 对image打tag @H_403_26@[root@localhost/]#dockertagdaa11948e23dload:tag @H_403_26@ 6.6 export-import与save-load的区别
导出后再导入(export-import)的镜像会丢失所有的历史,而保存后再加载(save-load)的镜像没有丢失历史和层(layer)。这意味着使用导出后再导入的方式,你将无法回滚到之前的层(layer),同时,使用保存后再加载的方式持久化整个镜像,就可以做到层回滚。(可以执行docker tag <LAYER ID> <IMAGE NAME>来回滚之前的层)。
6.7 一些其它命令
docker logs $CONTAINER_ID #查看docker实例运行日志,确保正常运行
docker inspect $CONTAINER_ID #docker inspect <image|container> 查看image或container的底层信息
docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag] 同上,可以指定repo和可选的tag
docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps 也可以看到
7 一些使用技巧
7.1 docker文件存放目录
Docker实际上把所有东西都放到/var/lib/docker路径下了。
@H_403_26@[root@localhostdocker]#ls-F @H_403_26@containers/devicemapper/execdriver/graph/init/linkgraph.dbrepositories-devicemappervolumes/ @H_403_26@ containers目录当然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下,这样我们就可以看看文件层里到底有哪些东西,利用这种层级结构可以清楚的看到文件层是如何一层一层叠加起来的。7.2 查看root密码
docker容器启动时的root用户的密码是随机分配的。所以,通过这种方式就可以得到容器的root用户的密码了。
@H_403_26@dockerlogs5817938c3f6e2>&1|grep'User:'|tail-n1 http://blog.csdn.net/fgf00/article/details/51893771#comments