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

相關文章
相關標籤/搜索