docker之鏡像管理——倉庫使用

倉庫使用

docker官方倉庫

註冊

https://hub.docker.comnginx

自由註冊,郵件激活便可使用docker

 

 

命令使用

Docker  pull/search/login/push/tag後端

 

tag [鏡像名:版本]  [倉庫]/[鏡像名:版本]標記本地鏡像,將其納入某一倉庫centos

Push [倉庫]/[鏡像名:版本]: 推送鏡像到倉庫  --須要登錄 服務器

Search [鏡像名]:在倉庫中查詢鏡像 – 沒法查詢到tag版本 restful

Pull [鏡像名:版本] 下載鏡像到本地ui

Login:登錄倉庫spa

1、命令登錄dockerhub3d

 

2、再使用tag命令標記一個鏡像,指定本身的倉庫rest

 

3、使用push命令推送此鏡像到倉庫裏

 

4、打開查詢本身倉庫的鏡像

 

私有倉庫

搭建

下載registry鏡像:docker pull registry

-----可配置加速器加速下載

 

啓動

docker run -d --name reg -p 5000:5000 registry

 

而後能夠經過restful接口查看倉庫中的鏡像(當前倉庫是空的)

 

配置http傳輸

私服默認只能使用https,須要配置開放http

 

配置完畢重啓下docker服務

systemctl daemon-reload

systemctl restart docker

私服倉庫推送鏡像

docker tag hello-world   192.168.244.7:5000/hello-world

 

docker push 192.168.244.7:5000/hello-world

 

查詢鏡像:http://192.168.244.5:5000/v2/_catalog   

 

查詢hello版本:   http://192.168.244.5:5000/v2/hello/tags/list

 

commit鏡像並上傳倉庫

建立一個centos容器:

啓動後自動進入此容器

 

容器內安裝nginx服務:

添加一下nginx源:

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

yum search nginx    ##搜索一下看看

yum install nginx -y    ## 安裝

啓動nginx服務

 

 ctrl +P+Q退出容器,在主機環境內校驗nginx請求,正常獲得歡迎頁

 

 commit服務爲一個nginx鏡像

如今要將cent容器提交成爲一個鏡像,命令以下:

docker commit cent cent-ng:v1

可看到獲得了新的鏡像cent-ng:v1

 

 啓動此nginx鏡像

1、使用新建的鏡像建立容器,並進入查看,發現已安裝有nginx,但nginx並未啓動

 

 容器內啓動nginx服務,並退出容器。在主機方校驗,nginx歡迎頁面出現

 

 2、如今咱們但願啓動容器時,直接啓動nginx服務,怎麼作?

docker run -d --name ngx3 cent-ng:v1  /usr/sbin/nginx  -g  "daemon off;"

 

可看到,容器內nginx服務也已正常運行

 

ps:後面運行的命令都是容器命令,因爲nginx命令沒有設置到path中,因此全路徑啓動,

nginx -g這個參數是指能夠在外面添加指令到nginx的配置文件中,

daemon off是指nginx服務不運行在後端,而是在前臺運行(container中的服務必須運行在前臺)

commit建立鏡像方式的本質

 

 

原容器與commit後的鏡像,在文件系統上並沒有區別。只是把容器層原來的可寫屬性,置成了只讀。因而變成了一個不可改的鏡像

數據管理

docker容器運行,產生一些數據/文件/等等持久化的東西,不該該放在容器內部。應當以掛載的形式存在主機文件系統中。

docker的文件系統

 

 

  1. 鏡像與容器讀寫層,經過聯合文件系統,組成系統文件視角
  2. 容器服務運行中,必定會生成數據
  3. 容器只是運行態的服務器,是瞬時的,不承載數據的持久功能

volume文件掛載的探究

1volume參數建立容器數據卷

 

 

2咱們經過docker inspect data查看容器元數據,可看到掛載信息

 

 

3、在容器端添加一個文件

 

 

回主機目錄查看,果真存在此文件:

 

 

4、在主機方添加一個文件

 

 

回容器裏查看,果真也同步增長了此文件

 

 

5、指定主機目錄方式掛載文件

格式:-v path1path2

以下命令,容器方會自動增長一個data目錄

 

 

宿主機方,一樣自動增長一個/opt/data目錄

 

 

volumes-from引用數據卷

新啓一容器,引入上一步的data容器目錄

 

 

自動獲得同一個目錄,內容與data容器裏掛載同樣

 

 

 

備份/恢復數據卷   

 

備份:docker run --rm --volumes-from data -v $(pwd):/backup centos tar cvf /backup/data.tar /opt/data

恢復:docker run --rm --volumes-from data -v $(pwd):/backup centos tar xvf /backup/data.tar -C /

 

釋義:

docker  run --rm ----- 啓動一個新的容器,執行完畢刪除

--volumes-from data ------- data容器中掛載卷

-v $(pwd):/backup   --------掛載當前目錄到容器中爲backup

cvf /backup/data.tar /opt/data --------- 備份/opt/data目錄(即卷中全部的數據data.tar

 

xvf /backup/data.tar -C /  ---------- 解壓data.tar 到根目錄/ ,因tar歸檔中已包含了/opt/data路徑

 

刪除數據卷:

docker rm -v data

 

Dockerfile使用

dockerfile方式建立容器

最簡單的dockerfile

 

 

建立鏡像

 

 

使用此鏡像運行一個容器

 

 

dockerfile基本要素

 

 

dockerfile指令

FROM

  FROM {base鏡像}

  必須放在DOckerfile的第一行,表示從哪一個baseimage開始構建 

MAINTAINER

可選的,用來標識image做者的地方

RUN 

RUN都是啓動一個容器、執行命令、而後提交存儲層文件變動。

第一層 RUN command1 的執行僅僅是當前進程,一個內存上的變化而已,其結果不會形成任何文件。

而到第二層的時候,啓動的是一個全新的容器,跟第一層的容器更徹底不要緊,天然不可能繼承前一層構建過程當中的內存變化。

而若是須要將兩條命令或者多條命令聯合起來執行須要加上&&

如:cd /usr/local/src && wget xxxxxxx

CMD

  CMD的做用是做爲執行container時候的默認行爲(容器默認的啓動命令)

  當運行container的時候聲明瞭command,則再也不用image中的CMD默認所定義的命令

一個Dockerfile中只能有一個有效的CMD,當定義多個CMD的時候,只有最後一個纔會起做用

EXPOSE

EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時並不會由於這個聲明應用就會開啓這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另外一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P 時,會自動隨機映射 EXPOSE 的端口。

entrypoint

entrypoint的做用是,把整個container變成可執行的文件,且不可以經過替換CMD的方法來改變建立container的方式。可是能夠經過參數傳遞的方法影響到container內部

每一個Dockerfile只可以包含一個entrypoint,多個entrypoint只有最後一個有效

當定義了entrypoint之後,CMD只可以做爲參數進行傳遞

ADD & COPY

  host上的文件或者目錄複製到image中(可以進行自動解壓壓縮包)  

ENV

  用來設置環境變量,後續的RUN可使用它所建立的環境變量 

WORKDIR

  用來指定當前工做目錄(或者稱爲當前目錄) 

USER

  運行RUN指令的用戶 

VOLUME

  用來建立一個在image以外的mount point

nginx鏡像製做實戰

編譯/安裝nginx

mkdir一個目錄,在此目錄內下載nginx源碼包

wget  http://nginx.org/download/nginx-1.13.2.tar.gz

 

並建立一個Dockerfile文件,文件內製做一系列nginx的編譯安裝流程,內容如文件:

 

 

 

其中,每個RUN就是增長一個鏡像層文件,一層層的RUN命令最終造成一系列鏡像層

 

運行build指令(注意最後的.表明當前路徑),製做鏡像

docker build -t cent-ngx2  .

 

 

咱們查看一下這個鏡像的層次歷史

 

 

可看到,此鏡像層基本與dockerfile文件的RUN是一一對應的

 

使用製做的nginx鏡像,建立一個容器。

所以鏡像無前臺命令,由於必須指定啓動命令 /usr/local/nginx/sbin/nginx -g "daemon off;"

 

 

爲鏡像指定環境變量,掛載目錄,默認啓動命令

在上一版鏡像的基礎上,咱們新加配置

 

 

執行:docker build -t cent-ngx3  .

 

 

查看鏡像的歷史,可看到比ngx2的鏡像多了幾個層

 

 

ngx3的鏡像建立容器,已經不須要再指定cmd命令了

可執行命令自行校驗:docker run -d --name ng2 cent-ngx3

相關文章
相關標籤/搜索