《第一本docker書》第4章 使用docker鏡像和倉庫 讀書筆記

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 從鏡像運行一個容器。
  • 執行一條指令,對容器作出修改。
  • 執行相似docker commit 的操做,提交一個新的鏡像層。
  • 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的端口所有公開

相關文章
相關標籤/搜索