docker学习笔记

一、 安装docker

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@localhost /]# yum -y install docker-io
html

二、 更改配置文件
[root@localhost /]# vi /etc/sysconfig/docker
other-args列更改成:other_args="--exec-driver=lxc --graph='/data/docker' --selinux-enabled"
http://m.myexception.cn/cloud/2029837.htmllinux

能够看出,execDriver是插件机制。
对应代码在docker/deamon/execdriver下,能够看出来目前有lxc、native两种driver。
将来还会有windows driver。web

三、 启动docker服务
[root@localhost /]# service docker start
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]redis

将docker加入开机启动
[root@localhost /]# chkconfig docker ondocker

四、基本信息查看
docker version:查看docker的版本号,包括客户端、服务端、依赖的Go等
[root@localhost /]# docker version
Client version: 1.0.0
Client API version: 1.12
Go version (client): go1.2.2
Git commit (client): 63fe64c/1.0.0
Server version: 1.0.0
Server API version: 1.12
Go version (server): go1.2.2
Git commit (server): 63fe64c/1.0.0shell

docker info :查看系统(docker)层面信息,包括管理的images, containers数等
[root@localhost /]# docker info
Containers: 16
Images: 40
Storage Driver: devicemapper
Pool Name: docker-253:0-1183580-pool
Data file: /var/lib/docker/devicemapper/devicemapper/data
Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata
Data Space Used: 2180.4 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 3.4 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: lxc-0.9.0
Kernel Version: 2.6.32-431.el6.x86_64ubuntu

五、 镜像的获取与容器的使用
镜像能够看做是包含有某些软件的容器系统,好比ubuntu就是一个官方的基础镜像,不少镜像都是基于这个镜像“衍生”,该镜像包含基本的ubuntu系统。再好比,hipache是一个官方的镜像容器,运行后能够支持http和websocket的代理服务,而这个镜像自己又基于ubuntu。
搜索镜像: docker search <image>:在docker index中搜索image
[root@localhost /]# docker search ubuntu12.10
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mirolin/ubuntu12.10 0
marcgibbons/ubuntu12.10 0
mirolin/ubuntu12.10_redis 0
chug/ubuntu12.10x32 Ubuntu Quantal Quetzal 12.10 32bit base i... 0
chug/ubuntu12.10x64 Ubuntu Quantal Quetzal 12.10 64bit base i... 0windows

下载镜像: docker pull <image> :从docker registry server 中下拉image
[root@localhost /]# docker pull chug/ubuntu12.10x64bash

查看镜像:
docker images: 列出images
docker images -a :列出全部的images(包含历史)
docker images --tree :显示镜像的全部层(layer)(已经弃用)
docker rmi <image ID>: 删除一个或多个imagewebsocket

使用镜像建立容器:
[root@localhost /]# docker run chug/ubuntu12.10x64 /bin/echo hello world
hello world
交互式运行:
[root@localhost /]# docker run -i -t chug/ubuntu12.10x64 /bin/bash
root@2161509ff65e:/#

net-tools 若是没有ifconfig 须要安装net-tools
查看容器:
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:container_port> :映射 HOST 端口到容器,方便外部访问容器内服务,host_port 能够省略,省略表示把 container_port 映射到一个动态端口。
注:使用start是启动已经建立过得container,使用run则经过image开启一个新的container。
删除容器(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-id> <image-name>
6.2 持久化容器
export命令用于持久化容器
docker export <CONTAINER ID> > /tmp/export.tar
6.3 持久化镜像
Save命令用于持久化镜像
docker save 镜像ID > /tmp/save.tar
6.4 导入持久化container
删除container 2161509ff65e
导入export.tar文件
docker rm 2161509ff65e
cat /tmp/export.tar | docker import - export:latest(export为新的container名)
6.5 导入持久化image
删除image daa11948e23d
导入save.tar文件
docker rmi daa11948e23d
docker load < /tmp/save.tar
对image打tag
docker tag daa11948e23d load:tag
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.1 docker文件存放目录
Docker实际上把全部东西都放到/var/lib/docker路径下了
[root@localhost docker]# ls -F
containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/

containers目录固然就是存放容器(container)了,graph目录存放镜像,文件层(file system layer)存放在graph/imageid/layer路径下,这样咱们就能够看看文件层里到底有哪些东西,利用这种层级结构能够清楚的看到文件层是如何一层一层叠加起来的。

7.2 查看root密码 docker容器启动时的root用户的密码是随机分配的。因此,经过这种方式就能够获得容器的root用户的密码了。 docker logs 5817938c3f6e 2>&1 | grep 'User: ' | tail -n1