使用Docker鏡像

什麼是Docker鏡像?

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]

利用commit理解鏡像構成

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 指令)。

這裏簡單的介紹了下鏡像的各類操做指令,固然鏡像的實現原理仍是須要去深究一會兒的。下文再敘!

相關文章
相關標籤/搜索