Docer的鏡像是一個只讀的文件系統,除了提供容器(進程)運行時所需的程序、庫、資源、配置等文件外,還包含了一些爲運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建以後也不會改變。nginx
Docker Hub上有大量的高質量的鏡像能夠用,從Docker鏡像倉庫獲取鏡像的命令是docker pull,其命令格式爲git
docker pull [選項] [Docker Registry 地址[:端口號]/]倉庫名[:標籤]
鏡像名稱的格式爲:web
Docker 鏡像倉庫地址:地址的格式通常是 <域名 ip> [:端口號] 。默認地址是 Docker
Hub。
docker
倉庫名:如以前所說,這裏的倉庫名是兩段式名稱,即 <用戶名> / <軟件名> 。對於 Docker
Hub,若是不給出用戶名,則默認爲 library ,也就是官方鏡像。
ubuntu
有了鏡像以後,咱們就能夠以這個鏡像爲基礎啓動一個容器來運行。以上面的 ubuntu:16.04 爲
例,若是咱們打算啓動裏面的 bash 而且進行交互式操做的話,能夠執行下面的命令。bash
docker run -it --rm \ ubuntu:16.04 \ bash
這裏咱們是手動的根據鏡像啓動容器,咱們接下來看下docker run的各類參數的詳解。
Docker run後的參數不少,Docker會在隔離的容器中運行進程,當運行docker run 命令時,Docker回啓動一個進程,併爲這個進程分配其獨佔的文件系統、網絡資源和以此進程爲根進程的進程組。在容器啓動時,鏡像可能已經定義了要運行的二進制文件、暴露的網絡端口等,可是用戶能夠經過docker run命令從新的定義,就是說,docker run能夠控制一個容器運行時的行爲,好比監聽的端口號,它能夠覆蓋docker build在構建鏡像時的一些默認配置。網絡
正常的命令行爲學習
docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]ui
這裏咱們先來講下OPTIONS命令行
Detached(-d) 容器運行在後臺模式?後臺模式和前臺模式的區別待詳細。 Name(--name) 指定運行的容器名稱 Network settings(--net 或 --mac-address) 默認狀況下全部容器都是開啓了網絡接口,可使用--net none來關閉網絡接口,也可使用 --mac-address 12:34這種方式來設置容器的MAC地址。 Clean up(--rm) 設置該命令時,每一個容器在退出時,它的文件系統並不會保存下來。而且--rm和-d是不可同時使用的。 暴露端口(-p) 使用-p來使容器和主機的對應端口進行綁定,能夠手動指定,也能夠走默認的。 環境變量(-e) 使用-e來給容器中進程設定環境變量,甚至能夠覆蓋已經存在的環境變量,好比 -e "deep=purple"
COMMAND也就是CMD是能夠用來覆蓋默認的執行命令的。
run指令參考文章 http://dockone.io/article/152,文中還有許多其餘許多參數的解釋。
想要列出已經下載了的鏡像,可使用docker image ls命令。
在鏡像下載和上傳的過程當中鏡像是保持着壓縮狀態的,因此這裏列表出來的鏡像的大小會比較大。
docker system df 命令用來查看鏡像、容器、數據卷所佔用的控件、
因爲新舊鏡像同名,舊鏡像名稱被取消,從而出現倉庫名、標籤均爲none的鏡像。這類無標籤鏡像也被成爲虛懸鏡像。
docker image ls -f dangling=true 用來查看虛懸鏡像
首先,若是有在使用該鏡像的容器正在運行,則須要首先中止該容器並刪除該容器
//中止運行中的容器 docker stop [容器id] //刪除容器 docker rm [容器id] //刪除鏡像 docker rmi [鏡像id]
Docker會利用中間層鏡像,因此在使用了一段時間以後,可能會看到一些依賴的中間層鏡像。
docker image -a 列出包括着中間層鏡像在內的全部鏡像
//根據倉庫名列出鏡像 docker image ls ubuntu //列出特定的某個鏡像 docker image ls ubuntu:16.04 //列出全部鏡像的id docker image ls -q
docker inspect [鏡像ID]
docker commit命令除了學習以外,還有一些特殊的應用場合,好比被入侵後保存現場等。可是,定製鏡像最好仍是使用Dockerfile來完成。
鏡像是容器的基礎,每次執行docker run的時候都會指定哪一個鏡像做爲容器運行的基礎。以前咱們常用docker hub上的鏡像,可是當這些鏡像沒法直接知足需求時,咱們就須要定製這些鏡像。
咱們以前有學,鏡像是多層存儲的,每一層是在前一層的基礎上進行的修改;而容器一樣也是多層存儲,是在以鏡像爲基礎
docker run --name blackwebserver -d -p 80:80 nginx
使用NGINX鏡像啓動一個容器,命名爲blackwebserver,而且映射了80端口,
進入容器的命令:
docker exec -it blackwebserver
將修改了的容器保存爲新的鏡像
docker commit blackwebserver nginx/blackwebserver
docker commit命令雖然能夠比較直觀的幫助理解鏡像分層存儲的概念,可是實際環境中並不會這樣使用。
這裏的commit就有點相似於git commit了,將修改好的程序commit生成咱們的靜態文件(項目)。而後能夠將鏡像push到鏡像倉庫中(docker push 指令)。
這裏簡單的介紹了下鏡像的各類操做指令,固然鏡像的實現原理仍是須要去深究一會兒的。下文再敘!