Docker 包括三個基本概念linux
先理解了這三個概念,就理解了 Docker 的整個生命週期。git
1 yum install -y epel-release 2 yum install docker-io # 安裝docker 3 # 配置文件 /etc/sysconfig/docker 4 5 chkconfig docker on # 加入開機啓動 6 service docker start # 啓動docker服務 7 8 # 基本信息查看 9 docker version # 查看docker的版本號,包括客戶端、服務端、依賴的Go等 10 docker info # 查看系統(docker)層面信息,包括管理的images, containers數等 11 docker pull centos 下載 12 docker images [ centos ] 查看 13 docker run -i -t centos /bin/bash
1 # 搜索鏡像 2 docker search <image> # 在docker index中搜索image 3 # 下載鏡像 4 docker pull <image> # 從docker registry server 中下拉image 5 # 查看鏡像 6 docker images: # 列出images 7 docker images -a # 列出全部的images(包含歷史) 8 docker rmi <image ID>: # 刪除一個或多個image 9 10 # 使用鏡像建立容器 11 docker run -i -t sauloal/ubuntu14.04 12 docker run -i -t sauloal/ubuntu14.04 /bin/bash # 建立一個容器,讓其中運行 13 bash 應用,退出後容器關閉 14 # 查看容器 15 docker ps :列出當前全部正在運行的container 16 docker ps -l :列出最近一次啓動的container 17 docker ps -a :列出全部的container(包含歷史,即運行過的container) 18 docker ps -q :列出最近一次運行的container ID 19 # 再次啓動容器 20 docker start/stop/restart <container> #:開啓/中止/重啓container 21 docker start [container_id] #:再次運行某個container (包括歷史container) 22 docker attach [container_id] #:鏈接一個正在運行的container實例(即實例須 23 爲start狀態,能夠多個窗口同時attach 一個container實例) 24 docker start -i <container> #:啓動一個container並進入交互模式(至關於先 25 start,在attach) 26 docker run -i -t <image> /bin/bash #:使用image建立container並進入交互模 27 式, login shell是/bin/bash 28 docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便 29 外部訪問容器內服務,host_port 能夠省略,省略表示把 container_port 映射到 30 一個動態端口。 31 #注:使用start是啓動已經建立過得container,使用run則經過image開啓一個新的 32 container。 33 34 # 刪除容器 35 docker rm <container...> #:刪除一個或多個container 36 docker rm `docker ps -a -q` #:刪除全部的container 37 docker ps -a -q | xargs docker rm #:同上, 刪除全部的container
3.進入容器 - nsenter 命令github
使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,全部窗口都會同步顯示。當某個窗口因命令阻塞時,其餘窗口也沒法執行操做了。
nsenter安裝
nsenter 工具在 util-linux 包2.23版本後包含。 若是系統中 util-linux 包沒有該命令,能夠按照下面的方法從源碼安裝。web
1 cd /usr/src ; wget https://www.kernel.org/pub/linux/utils/util-linux/v2.28/util-linux-2.28.tar.gz 2 3 ./configure --without-ncurses 4 5 make nsenter && sudo cp nsenter /usr/local/bin
nsenter使用
nsenter 能夠訪問另外一個進程的名字空間。nsenter 要正常工做須要有 root 權限。
爲了鏈接到容器,你還須要找到容器的第一個進程的 PID,能夠經過下面的命令獲取。docker
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
經過這個 PID,就能夠鏈接到這個容器:shell
nsenter --target $PID --mount --uts --ipc --net --pid
更簡單的,建議下載 .bashrc_docker,並將內容放到 .bashrc 中。ubuntu
wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker; echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
這個文件中定義了不少方便使用 Docker 的命令,例如 docker-pid 能夠獲取某個容器的 PID;而
docker-enter 能夠進入容器或直接在容器內執行命令。centos
echo $(docker-pid <container>) docker-enter <container> ls docker-enter <container> bash
運行中的鏡像稱爲容器。你能夠修改容器(好比刪除一個文件),但這些修改不會影響到鏡像。不過,你使用docker commit 命令能夠把一個正在運行的容器變成一個新的鏡像。ruby
docker commit <container> [repo:tag] # 將一個container固化爲一個新的image,後面的repo:tag可選。bash
export命令用於持久化容器
docker export <CONTAINER ID> > /tmp/export.tar
Save命令用於持久化鏡像
docker save 鏡像ID > /tmp/save.tar
3.4 導入持久化container
刪除container 2161509ff65e
docker rm 2161509ff65e
導入export.tar文件
cat /tmp/export.tar | docker import - export:latest
刪除image daa11948e23d
docker rmi daa11948e23d
導入save.tar文件
docker load < /tmp/save.tar
對image打tag
docker tag daa11948e23d load:tag
導出後再導入(export-import)的鏡像會丟失全部的歷史,而保存後再加載(save-load)的鏡像沒有丟失歷史和層(layer)。這意味着使用導出後再導入的方式,你將沒法回滾到以前的層(layer),同時,使用保存後再加載的方式持久化整個鏡像,就能夠作到層回滾。(能夠執行docker tag 來回滾以前的層)。
1 docker logs $CONTAINER_ID #查看docker實例運行日誌,確保正常運行 2 docker inspect $CONTAINER_ID #docker inspect <image|container> 查看image或container的底層信息 3 docker build <path> 尋找path路徑下名爲的Dockerfile的配置文件,使用此配置生成新的image 4 docker build -t repo[:tag] 同上,能夠指定repo和可選的tag 5 docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式獲取內容,使用此配置生成新的image 6 docker port <container> <container port> 查看本地哪一個端口映射到container的指定端口,其實用docker ps 也能夠看到
Docker實際上把全部東西都放到/var/lib/docker路徑下了。
1 [root@localhost docker]# ls -F
2 containers/ devicemapper/ execdriver/ graph/ init/ linkgraph.db repositories-devicemapper volumes/
containers目錄固然就是存放容器(container)了,graph目錄存放鏡像,文件層(file system layer)存放在graph/imageid/layer路徑下,這樣咱們就能夠看看文件層裏到底有哪些東西,利用這種層級結構能夠清楚的看到文件層是如何一層一層疊加起來的。
轉載請務必保留此出處:http://blog.csdn.net/fgf00/article/details/51893771