*作者:周世杰
上一節(jié)我們主要講了《Docker 介紹及實戰(zhàn)》,這一節(jié)我們給大家重點講下Docker鏡像。
以實戰(zhàn)為主,分三步走:使用別人的鏡像 ——》制作自己鏡像——》搭建自己的私有鏡像倉庫。
一、使用別人的鏡像
配置國內鏡像源
Docker 拉?。╬ull)鏡像都是訪問默認的Docker hub上的鏡像,在國內網(wǎng)絡環(huán)境下,下載鏡像速度特別慢,所以建議國內用戶使用Registry Mirror配置國內倉庫鏡像.方法如下:
首先,通過/etc/docker(系統(tǒng)如果沒有這個文件,就新建一個)文件指定要使用的鏡像源,這里以Docker官方提供的中國區(qū)鏡像源為例:
vi /etc/docker
{
"registry-mirrors":[";]
}備注:大家也可以使用其他的鏡像源,比如:
ustc:
網(wǎng)易:
騰訊: //只有在騰訊云里面才可以訪問到
DaoCloud: http://{id}.m.daocloud.io //{id}需要自己注冊賬號后申請得到
aliyun: https://{id}.mirror.aliyuncs.com // {id} 需要自己注冊賬號后申請得到
接著,重新加載配置,重啟docker:
systemctl daemon-reload
systemctl restart docker通過 docker info 看下配置是否生效:
搜索鏡像
使用別人的鏡像,第一步應該是先搜索鏡像,通常我們會去Docker官方鏡像庫()里面找。下面通過docker search來搜索鏡像。
以busybox為例(BusyBox是一個集成了一百多個最常用Linux命令和工具【如cat、echo、grep、mount、telnet】的精簡工具箱,它只有不到2MB的大小,很方便進行各種快速驗證)
首先通過以下命令看下幫助:
docker search --help
接下來參考幫助來搜索busybox鏡像:docker search busybox
通過上圖,我們看到搜索到25個鏡像(其實還有很多,只是默認返回25條記錄),鏡像按照stars(收藏數(shù))從大到小排列。如果我們只想查找收藏數(shù)大于10的,可以通過-f來過濾:
docker search -f stars=10 busybox
限制只返回2條,并且返回不截斷輸出結果:docker search -f stars=10 --limit=2 --no-trunc busybox
如果只想搜索官方鏡像,可以這樣:docker search -f is-official=true busybox
獲取鏡像
搜索到我們想要的鏡像后,通過docker pull來拉取鏡像:
docker pull busybox
tip:不指定tag,則默認會拉取latest標簽的鏡像。
查看鏡像信息
鏡像pull下來后,我們通過以下命令查看下載的鏡像:
docker images
可以看到鏡像來自哪個倉庫,標簽,鏡像ID,創(chuàng)建時間,鏡像大小。
還可以通過以下命令查看鏡像的詳細信息:注:命令中的 af2f 為鏡像的id,請根據(jù)實際情況替換;文中出現(xiàn)的類似命令都以此方法處理
docker inspect af2f
通過以下命令查看鏡像歷史信息:docker history af2f
我們可以結合busybox的Dockerfile文件來看組成鏡像的各個層的具體內容。
上面看到的scratch鏡像值得一說:
scratch鏡像:世界上最小的鏡像,通常被用來制作第一個真正的鏡像。
scratch是這樣做出來的:tar cv --files-from /dev/null | docker import - scratch
如果嘗試拉取鏡像,會得到這樣的提示:
也就是說scratch是docker保留字,這個鏡像神一樣的存在,直接基于它做鏡像就可以,不需要拉取。
標記鏡像
我們在使用鏡像的時候,一般都是通過name:tag的形式。tag相當于鏡像的別名,通常標記為可識別的版本。比如我本地pull了busybox的三個版本):
通過docker tag給鏡像添加任意標簽:docker tag busybox:1.30 busybox:custom
通過上面的操作,我給鏡像busybox:1.30添加了一個新標簽:custom.
清理鏡像
使用Docker一段時間后,系統(tǒng)中可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,就需要我們不定期的清理鏡像。
清理之前我們先看以下系統(tǒng)有哪些容器和鏡像,其中tag為latest和custom的鏡像正在使用:
通過以下命令清理鏡像:docker image prune -a -f
參數(shù)說明:
-a 刪除所有無用鏡像,不光是臨時鏡像
-f 強制刪除鏡像,而不是進行提示確認通過上面的命令,我們發(fā)現(xiàn)鏡像只剩下tag為latest這一個了(因為這個被正在運行的容器使用,所以沒有被清理)。
需要注意的是,tag為custom的鏡像也被刪了,查看容器列表:
通過容器列表可以看到,原來使用tag為custom鏡像的容器,現(xiàn)在的image變?yōu)閍f2f...這個ID了。也就是說通過上面命令清理鏡像的時候,除了沒有被用到的鏡像會被刪除以外,同一個ID的鏡像只會保留一個。
刪除鏡像
對于沒有用到的鏡像,我們還可以使用以下命令來刪除鏡像:
docker rmi busybox:latest
傳遞鏡像
很多時候,我們需要在內網(wǎng)的docker環(huán)境下使用外網(wǎng)的鏡像,我們可以在外網(wǎng)環(huán)境下,通過docker pull把鏡像拉下來,然后通過以下命令打包成tar文件:
docker save -o bu busybox:latest
然后把該tar文件拷貝到內網(wǎng),在內網(wǎng)docker環(huán)境下執(zhí)行以下命令導入鏡像:docker load -i bu
二、制作自己的鏡像
我們不可能一直使用別人的鏡像,在容器時代,我們的業(yè)務也需要跑在容器里面,所以我們要學會自己制作鏡像。
制作鏡像的方式主要有兩種:
一是通過docker commit的方式,這種方式適合新手,或者鏡像不需要經(jīng)常更改的情況,制作過程就是啟動一個已有鏡像,然后在容器里面把自己的業(yè)務部署好,最后commit成鏡像就ok了。
二是通過Dockerfile文件build鏡像,本人比較推薦使用這種方式,后續(xù)維護和更新鏡像比較容易,前提就是需要掌握Dockerfile文件的編寫。
下面重點介紹通過Dockerfile的方式來制作鏡像,首先說一下Dockerfile中常用的指令:
FROM :指定構建鏡像的基礎源鏡像。FROM一般是 Dockerfile 中非注釋行的第一個指令。
LABEL : 以鍵值對的形式給鏡像添加元數(shù)據(jù)。
MAINTAINER :指定創(chuàng)建/維護鏡像的用戶或組織,已過時,推薦使用LABEL
ADD :復制本地文件/目錄、遠程文件到容器指定路徑中,還可以是一個tar文件(自動解壓)
COPY :復制本地文件/目錄到容器指定路徑中
ENV :指定環(huán)境變量,會被后續(xù)RUN使用,并在容器運行時保留
WORKDIR :為后續(xù)的RUN、CMD、ENTRYPOINT配置工作目錄
USER :指定運行容器時的用戶名/UID,后續(xù)的RUN、CMD、ENTRYPOINT也會使用指定用戶。
RUN :根據(jù)業(yè)務需要執(zhí)行一些命令
VOLUME :創(chuàng)建一個掛載點
EXPOSE :指定容器要暴露的端口號
ONBUILD :當所創(chuàng)建的鏡像被作為其它新創(chuàng)建鏡像的基礎鏡像時,所執(zhí)行的操作
CMD :配置容器啟動后執(zhí)行的命令,支持三種格式:
CMD [“executable” ,”Param1”, “param2”] 使用exec執(zhí)行,推薦
CMD command param1 param2,在/bin/sh上執(zhí)行
CMD [“Param1”, “param2”] 提供給ENTRYPOINT做默認參數(shù)。
ENTRYPOINT : 配置容器啟動后執(zhí)行的命令,并且不可被 docker run 提供的參數(shù)覆蓋。支持兩種格式:
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell中執(zhí)行)
從零開始制作一個“hello”鏡像,讓它 say: hello world
1.編寫一個
#include
2.編譯 (使用靜態(tài)編譯,把所需依賴都包含進來):
gcc -static -o hello
3.編寫Dockerfile
FROM scratch
COPY hello /
ENTRYPOINT ["/hello","p1","p2"]
4.構建鏡像 (注意后面有個點 . ):
docker build -t hello .
5.運行(--rm:容器運行結束后自動刪除):
docker run --rm hello p3 p4
輸出:
hello world
parameter 1 is p1.
parameter 2 is p2.
parameter 3 is p3.
parameter 4 is p4.
三、搭建自己的私有鏡像倉庫
學會自己制作鏡像后,要給自己鏡像一個“家”。下面教大家以最快捷的方式搭建一個私有鏡像倉庫;
首先拉取倉庫的鏡像:
docker pull registry
然后運行:
docker run -d -p 5000:5000 --restart always --name registry -v /opt/registry:/var/lib/registry registry
這樣我們的鏡像倉庫就搭建好了。下面我們驗證下倉庫是否可用,把busybox鏡像tag后進行push到私有倉庫:
然后把本地的busybox鏡像全部刪除,再從私有鏡像倉庫拉取。
經(jīng)過測試可以正常pull,證明我們的私有倉庫沒有問題。
總結
把上文提到的docker命令匯總下:
docker search :搜索鏡像
docker pull : 拉取鏡像
docker images : 列出本地鏡像
docker inspect : 查看鏡像元數(shù)據(jù)
docker history : 查看鏡像歷史信息
docker tag :給鏡像添加標簽
docker image prune :清理鏡像
docker rmi :刪除鏡像
docker save :保存鏡像為tar文件
docker load : 從tar文件加載鏡像
docker commit : 從容器創(chuàng)建鏡像
docker build : 從Dockerfile文件構建鏡像
本節(jié)的Docker 鏡像就介紹這些,我們下節(jié)給大家分享《微服務技術》
1.《如何訪問docker運行的鏡像、一個docker鏡像運行多個實例!》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡信息知識,僅代表作者本人觀點,與本網(wǎng)站無關,侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《如何訪問docker運行的鏡像、一個docker鏡像運行多個實例!》僅供讀者參考,本網(wǎng)站未對該內容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉載時請保留本站內容來源地址,http://f99ss.com/keji/3367671.html