1. 程式人生 > >建立Python資料分析的Docker映象+Docker自定義映象commit,Dockerfile方式解析+pull,push,rmi操作

建立Python資料分析的Docker映象+Docker自定義映象commit,Dockerfile方式解析+pull,push,rmi操作

例項解析Docker如何通過commit,Dockerfile兩種方式自定義Dcoker映象,對自定義映象的pull,push,rmi等常用操作,通過例項建立一個Python資料分析開發環境的Docker映象.1.通過commit操作在一個已有的映象上做更改而儲存為新的映象.2.例項解析Dockerfile自定義映象原理過程和命令規則.3.例項解析對自定義映象做pull,push,rmi等常用操作.

0.0.檢視本地已有的映象

wxl@wxl-pc:~$ docker images

這裡寫圖片描述

其實,本地已經包含兩個映象(根據自己獲取的映象稍有不同),它們的欄位描述是
- REPOSITORY:來自於哪個庫,如hello-world
- TAG:版本號,如lastest,16.04等。如果在docker run image 中未指定映象版本則預設是latest。
- IMAGE ID:每個映象都有對應的ID
- CREATED,SIZE分別是映象建立時間,映象大小

這些映象來源是從Docker Hub上獲取下來的,所以,根據REPOSITORY的名稱可以在網頁上搜索到該映象。如查hello-world映象
這裡寫圖片描述

The tags for each image, for example 14.04.
The image ID of each image.

0.1.提前下載映象

除了docker run命令會下載本地不存在的映象外,docker pull(類似於git pull,git push)可以單純的下載映象而不執行。
這樣預下載後,在使用該映象的時候可以馬上使用,再也不用因為網路原因而等待很久了。下載一個本地沒有的映象,如centos

wxl@wxl
-pc:~$ docker pull centos

這裡寫圖片描述

0.2.可以通過兩種方式來建立自己的Docker映象例項

- commit方式,更新已有的映象並將更新的結果提交。
- Dcokerfile方式,使用 Dockerfile命令去建立映象

1.commit方式,對已有的映象的自定義並將結果提交為一個新的映象

docker commit命令可以快速通過一個已經存在的映象做更改,建立一個的副本映象.

1.0.注意:如果網路條件不好,可以跳過步驟1.1,反正是在原有的容器上做更改提交為一個新的映象,也可以不做更改提交為新的映象

#進入已有的映象centos中
wxl@wxl
-pc:~$ docker run -t -i centos /bin/bash

1.1.建立一個定義的python資料分析環境的Docker映象

在提前pull的映象中做更改,如centos中搭建python資料分析環境,為python2安裝setuptool和pip工具,從而安裝numpy,pandas等第三方包(科學棧).

#安裝wget拉取所需要的包
[root@0c28c802c5e6 pip-8.1.2]# yum install wget
#通過wget下載setuptool和pip
[root@0c28c802c5e6 lib]# wget https://pypi.python.org/packages/1f/7a/6b239a65d452b04ad8068193ae313b386e6fc745b92cd4584fccebecebf0/setuptools-25.1.6.tar.gz#md5=fa165d9e7f9b68378076fa0aa3df8abd

[root@0c28c802c5e6 lib]# wget https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz#md5=87083c0b9867963b29f7aba3613e8f4a

#在當前如/下分別對下載的setuptool和pip解壓
[root@0c28c802c5e6 lib]# tar -zxf setuptools-25.1.6.tar.gz
[root@0c28c802c5e6 lib]# tar -zxf pip-8.1.2.tar.gz


#進入對應的路徑安裝setuptool
[root@0c28c802c5e6 lib]# cd setuptools-25.1.6
[root@0c28c802c5e6 setuptools-25.1.6]# ./setup.py install

#安裝pip
[root@0c28c802c5e6 lib]# cd  pip-8.1.2
[root@0c28c802c5e6 pip-8.1.2]# python setup.py install
#安裝Numpy
[root@0c28c802c5e6 pip-8.1.2]# pip install numpy
#完成

通過pip list檢視numpy及其他第三方包

[root@0c28c802c5e6 pip-8.1.2]# pip list

這裡寫圖片描述

1.2.在完成你想要做的改變後,可以通過以下命令提交一個更改後的映象副本副本.

注意引數,-m是對修改內容的描述,而-a則是作者署名.反斜槓後邊的是一個id,如[[email protected] pip-8.1.2]#
這表示操作的映象容器的id是0c28c802c5e6,如果,在通過[email protected]:~$ docker run -t -i centos /bin/bash都會的到不同的容器id.

這裡寫圖片描述

所以要填寫你在shell裡做了半天更改的那個容器id如6d548e7a5285

[email protected]-pc:~$ docker commit -m "Added python setuptool pip numpy" -a "wangxiaolei" 0c28c802c5e6 mycentos:mydev

通過docker images命令看到已經建立了自己的的mycentos映象

這裡寫圖片描述

2.dockerfile方式,自定義一個新的映象

docker build可以從頭開始建立一個新的映象,優點是建立的映象有利於團隊分享

2.1.首先建立一個映象資料夾和dockerfile

wxl@wxl-pc:~/Docker$ mkdir wxlimage
wxl@wxl-pc:~/Docker$ cd wxlimage
wxl@wxl-pc:~/Docker/wxlimage$ touch Dockerfile

2.2.在Dockerfile中寫入建立映象自定義命令,這是一個自定義的過程,

wxl@wxl-pc:~/Docker/wxlimage$ vim Dockerfile

注意命令是需要大寫的,後面跟引數,寫入如下內容

FROM ubuntu:14.04
MAINTAINER wangxiaolei <email@email.com>
RUN echo "my images ,Dockerfile" && mkdir test

其中,FROM是映象的版本資訊,MAINTAINER是作者資訊RUN是在映象內部執行的命令,如更新源並安裝vim

這裡寫圖片描述

2.3.執行docker build命令

通過docker build一個自定義的映象,特別注意 命令後變動.“點”在當前檔案下執行build命令時代表Dockerfile命令.如果在資料夾外部,需要講點替換成帶有正確路徑的Dockerfile(目的是找到Dockerfile檔案並讀取檔案內容).

wxl@wxl-pc:~/Docker/wxlimage$ docker build -t new/wxlimage:v1 .

這裡寫圖片描述

2.4.從新建立的映象中執行容器

wxl@wxl-pc:~/Docker/wxlimage$ docker run -t -i new/wxlimage:v1 /bin/bash
#退出
exit

2.5.給新做的映象打一個新的標籤

wxl@wxl-pc:~/Docker/wxlimage$ docker tag 6f2021485011 new/wxlimage:v2

這裡寫圖片描述

3.pull,push,rmi

3.1.digests是對docker映象的摘要描述,只要映象不改變,摘要是可以預知的,可以通過digests對映象做Pull和push操作

wxl@wxl-pc:~/Docker/wxlimage$ docker images --digests | head

這裡寫圖片描述

wxl@wxl-pc:~/Docker/wxlimage$ docker pull ubuntu@sha256:9274d908eb6d9a3784e93290fcc49f3c5618db9e1b0174ee27f9fc75aa3c0fb0

這裡寫圖片描述

除了在pull和push可以使用digest外,還可以在映象的create,run,rmi或者build映象時Dockerfile中的FROM作為參考標示進行對應操作.

3.2.push一個映象到docker hub

wxl@wxl-pc:~/Docker/wxlimage$ docker push mycentos

這裡寫圖片描述

3.3.刪除本地映象

刪除一個本地映象

wxl@wxl-pc:~/Docker/wxlimage$ docker rmi new/wxlimage:v2

這裡寫圖片描述