docker最底端是一個引導文件系統,即bootfs。nginx
第二層是root文件系統rootfs,位於引導文件系統之上。git
在傳統的Linux引導過程當中,root文件系統會最早以只讀的方式加載,當引導結束並完成了完整性檢查以後,它纔會被切換爲讀寫模式。可是在docker裏,root文件系統永遠只能是隻讀狀態,而且docker利用聯合加載技術又會在root文件系統層上加載更多的只讀文件系統。聯合加載指的是一次同時加載多個文件系統,可是在外面看起來只能看到一個文件系統。聯合加載將各層文件系統疊加到一塊兒,這樣最終文件系統會包含全部底層的文件和目錄。web
docker將這樣的文件系統成爲鏡像。一個鏡像能夠放到另外一個鏡像的頂部。位於下面的鏡像成爲父鏡像,最底部的叫作基礎鏡像。docker
當docker第一次啓動一個容器時,初始的讀寫層是空的。當文件系統變化時,這些變化都會引用到這一層上。好比,若是想修改一個文件,這個文件會從該讀寫層下面的只讀層複製到讀寫層。該文件的只讀版本依然存在,可是已經被讀寫層中的該文件副本所隱藏。這種機制被成爲寫時複製。ubuntu
docker images #查看全部的docker鏡像
本地鏡像都保存在/var/lib/docker下,全部的容器都保存在/var/lib/docker/containers緩存
docker pull ubuntu #拉去鏡像
docker run -it --name 容器名稱 ubuntu:12.04 /bin/bash #能夠給鏡像加上版本
鏡像分用戶鏡像和頂層鏡像。bash
docker images fedora #查看指定的鏡像列表
docker search puppet #查找指定的鏡像
構建鏡像ui
docker login #登陸(國內訪問docker hub好慢啊)
docker commit 本地容器ID 用戶名/容器名 #提交
commit 還能夠附帶一些別的參數。blog
這本書裏並不推薦使用docker commit的方法構建鏡像。it
使用Dockerfile
Docker 大致按照以下流程執行Dockerfile中的指令。
docker build -t="用戶名/鏡像名" #基於Dockerfile構建容器
也能夠經過git倉庫源地址指定Dockerfile的位置。
若是構建出錯,能夠經過docker run 命令來基於此次構建到目前爲止已經成功的最後一步建立一個容器。
--no-cache 避免使用緩存
docker history 鏡像ID #獲取鏡像的構建歷史
Docker 能夠在宿主機上隨機選擇一個49000-49900的一個比較大的端口號來映射到80端口上。
能夠經過docker port 容器ID 新的端口號 命令來設置端口映射
也能夠在運行docker run 時指定 -p 宿主端口:容器端口
docker run -d -p 8080:80 --name static_web username/image \
nginx -g "daemon off" #這一句不是太懂,對nginx不是太瞭解
-p 也能夠將端口綁定到特定的IP地址上,如 -p 127.0.0.1:8080:80
-P 能夠將容器中EXPOSE的端口所有公開