• <noscript id="eom2a"><optgroup id="eom2a"></optgroup></noscript>
    <tt id="eom2a"><small id="eom2a"></small></tt>
    <input id="eom2a"></input>
  • <div id="eom2a"><small id="eom2a"></small></div>
    <td id="eom2a"><small id="eom2a"></small></td>
  • 您的位置:知識庫 ? 云計算

    Docker簡明教程

    來源: saymagic  發布時間: 2016-01-02 14:15  閱讀: 36066 次  推薦: 40   原文鏈接   [收藏]  

    Docker自從誕生以來就一直備受追捧,學習Docker是一件很炫酷、很有意思的事情。我希望通過這篇文章能夠讓大家快速地入門Docker,并有一些學習成果來激發自己的學習興趣。我也只是一個在Docker這條巨鯨上玩耍的小孩,全文如有不明確、不正確的地方,還請斧正。

      Ubuntu上安裝Docker

      Docker的基礎是Linux容器技術,因此學習Docker最好是使用Linux。這里推薦64位Ubuntu系統,因為在寫此文(2015-05-28)時,Docker還不支持32位,盡管民間有些土辦法可以象征性的解決,但還是推薦初學Docker的盡量按照標準的來。如果手邊沒有Ubuntu系統可以去Digitalocean、Ucloud等云服務商去租用一個Linux服務器。這樣即使玩壞了也可以隨時重新開始。

      在Ubuntu中只需要運行一行命令即可實現Docker的安裝:

    sudo apt-get install docker.io

      運行完后,可以在終端輸入docker看到下面的界面證明我們安裝成功了(注:提示權限問題就添加sudo,下文同):

      從上圖可以看到,Docker的命令并不多,只有三十幾個。例如我們可以輸入docker info來查看我們安裝的Docker信息:

      運行容器

      安裝好之后,我們就可以來開始Docker之旅了,

      我們現在的Docker還是一個”裸”Docker,上面沒有容器,等一下,什么是容器?所謂容器就是Docker中用來運行應用的,Docker的容器很輕量級,但功能卻強悍的很。也沒有鏡像。鏡像?鏡像簡單理解就是容器的只讀版本,用來方便存儲與交流。此時,我們可以通過官方提供給我們的鏡像來進行學習。比如我們想在Docker中運行一個Ubuntu系統,很簡單,Docker中得pull命令是用來獲取鏡像的,執行下面的命令,就會從官方倉庫里獲取Ubuntu 14.04版本的系統:

    docker pull ubuntu:14.04

      images命令用來查看本機Docker中存在哪些鏡像,運行 docker images 就會看到我們剛才獲取的Ubuntu14.04系統:

      現在,我們把剛剛的鏡像運行起來,運行起來的鏡像就叫做容器了,容器是可讀寫的,這樣我們就可以在容器里做很多有意思的事情了。run 命令就是將鏡像運行起來的,運行:

    docker run -it ubuntu:14.04

      仔細看,你會發現終端交互的用戶名變掉了,說明我們進入到了容器的內部,效果如下:

      現在我們所做的任何操作都是針對于目前容器而言的,不會影響到原來的系統,例如,我們在里面安裝下nginx服務器,運行如下命令:

    sudo apt-get install -y nginx

      完成后執行nginx -v就會發現我們已經將nginx安裝成功:

      將容器轉化為鏡像

      在上一小節中,我們已經在容器里安裝好了nginx,接下來我們希望將這個容器內容保存下來,這樣我們下次就無需再次安裝了。這就是Docker中將容器轉換為鏡像的技術。

      如果您還在剛剛的安裝了nginx的終端里,執行exit退出此終端,回到系統本身的終端:

      ps命令可以查看我們當前都運行了哪些容器,加上-a參數后就表示運行過哪些容器,因為我們剛剛已經退出了安裝nginx的容器,因此我現在想查看它的話,需要使用-a參數,執行如下命令:

    docker ps -a

      此時,就會顯示出我們剛剛運行的容器,并且Docker會很貼心的隨機給每個容器都起個Names方便標示。效果如下:

      commit命令用來將容器轉化為鏡像,運行下面的命令,我們可以講剛剛的容器轉換為鏡像:

    sudo docker commit -m "Added nginx from ubuntu14.04" -a "saymagic" 79c761f627f3 saymagic/ubuntu-nginx:v1

      其中,-m參數用來來指定提交的說明信息;-a可以指定用戶信息的;79c761f627f3代表的是容器的id;saymagic/ubuntu-nginx:v1指定目標鏡像的用戶名、倉庫名和tag 信息。創建成功后會返回這個鏡像的ID信息。注意的是,你一定要將saymagic改為你自己的用戶名。因為下文還會用到此用戶名。

      這是我們再次使用docker images命令就會發現此時多出了一個我們剛剛創建的鏡像:

      此時,如果運行 docker run -it saymagic/ubuntu-nginx:v1 就會是一個已經安裝了nginx的容器:

      存儲鏡像

      我們剛剛已經創建了自己的第一個鏡像,盡管它很簡單,但這已經非常棒了,現在,我們希望它能夠被更多的人使用到,此時,我們就需要將這個鏡像上傳到鏡像倉庫,Docker的官方Docker Hub應該是目前最大的Docker鏡像中心,所以,我們就將我們的鏡像上傳到Docker Hub。

      首先,我們需要成為Docker Hub的用戶,前往 https://hub.docker.com/ 進行注冊。需要注意的是,為了方便下面的操作,你需要將你的用戶名設為和我剛剛在上文提到的自定義用戶名相同,例如我的剛剛將鏡像的名字命名為是saymagic/ubuntu-nginx:v2,所以我的用戶名為saymagic、注冊完成后記住用戶名、密碼、郵箱。

      login默認是用來登陸Docker Hub的,因此,輸入如下命令來嘗試登陸Docker Hub:

    docker login

      此時,就會輸出交互,讓我們輸入Username、Password、Email,成功輸入我們剛才注冊的信息后就會返回Login Success提示:

      運行命令:

    docker push saymagic/ubuntu-nginx:v1

      這就是我們為什么將剛剛的鏡像命名為saymagic/ubuntu-nginx:v1的原因,如果你上面步驟都操作正確的正確的話,是會得到下面的內容:

      此時,不出意外的話,我們的鏡像已經被上傳到Docker Hub上面了,去Docker Hub上面看看:

      果然,我們在Docker Hub上有了我們的第一個鏡像,此時,其它的用戶就可以通過命令docker pull saymagic/ubuntu-nginx來直接獲取一個安裝了nginx的ubuntu系統了。不信?那就自己實踐一下吧!

      Dockerfile使用

      通過上面的學習,我們掌握了如何創建鏡像、獲取鏡像、上傳鏡像、運行容器等等內容。有了上面的知識,我們來次實戰。

      我們剛剛使用了commit命令創建了一個安裝nginx的鏡像,但其實Docker創建鏡像的命令還有build,build命令可以通過指定一個Dockerfile文件來實現將鏡像創建過程自動化。Dockerfile文件有著特定的編寫規則,但語法都還比較容易理解。這次我們不僅使用Dockerfile文件來創建一個像上文一樣安裝nginx的ubuntu鏡像,還要發揮nginx的老本行來運行一個網頁吧!DockFile可以很輕松的完成這個問題。首先將新建一個名字為www的文件夾,文件夾下面可以放一些HTML網頁,比如新建一個index.html文件,隨便寫點內容:

    <html>
    <head>
    Learn Docker
    </head>
    <body>
    <h1>Enjoy Docker!</h1>
    </body>
    </html>

    www的同級目錄下新建一個名為Dockerfile的文件,將DockerFile文件改寫如下:

    FROM ubuntu:14.04
    MAINTAINER saymagic saymagic@163.com
    RUN apt-get update
    RUN apt-get install -y nginx
    COPY ./www /usr/share/nginx/html
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]

      我來整體的解釋下這個Dockerfile文件,第一行是用來聲明我們的鏡像是基于什么構建的,這里我們指定為ubuntu 14.04,第二行的作用在于告訴別人你的大名。第三行和第四行的RUN命令用來在容器內部的shell里執行命令。第五行將當前系統的www文件夾拷貝到容器的/usr/share/nginx/html目錄下,第六行聲明當前需要對外開放80端口,最后一行表示運行容器時開啟nginx。不理解沒關系,因為這都是固定的語法,感興趣可以多看相關內容。此時我們通過build命令來構建鏡像,運行:

    docker build -t="saymagic/ubuntu-nginx:v2" .

      注意,最后的.表示Dockerfile在當前目錄,也可指定其它目錄。此時,再次運行docker images就會看到剛剛生成的鏡像:

      現在我們就可以運行剛剛的鏡像了,和前面運行稍有不同,此時我們需要對外指定80端口,該行為通過-p參數指定,運行:

    docker run -p 80:80 saymagic/ubuntu-nginx:v2

      此時,終端會卡住,這是正常的,因為Docker的思想是每個容器最好只開一個線程做一件事,此時我們打開了nginx服務器,所以終端卡住也沒關系(當然是有辦法來解決這個問題,但這里不做介紹)。現在我們可以通過瀏覽器訪問localhost查看效果,如果是虛擬主機則需輸入主機ip地址,然后就能看到了如下的頁面:

      DaoCloud實戰

      如果我們自己沒有服務器,剛剛的網頁我們只能在本地訪問,好可惜。別急,現在我要隆重介紹一個Docker的好伙伴——DaoCloud,官網傳送門:https://www.daocloud.io/

      有了DaoCloud,我們只需要負責寫Dockerfile,剩下的build、運行之類的東西都交給DaoCloud,我們只需要點一點按鈕即可。

      DaoCloud會將Github、GitCafe等git服務商作為代碼源,這里我使用GitCafe,為了你下面的操作更加方便,你可以直接Fork我的項目,項目地址: https://gitcafe.com/saymagic/LearnDocker 。

      接著,我們需要去Daocloud注冊一個賬號,完成后,進入個人主頁后選擇代碼構建->創建新項目->給項目起一個響亮的名字->同步GitCafe代碼源->選擇GitCafe下的LearnDocker項目:

      最后,點擊開始創建按鈕。Daoloud就會馬不停蹄的運行起來。如果細心的話你會發現,DaoCloud的build會比本地快很多,很迅速就會完成鏡像的構建:

      僅僅是構建鏡像沒什么意思, DaoCloud還可以將這個鏡像在云端運行起來。我們點擊綠色的查看鏡像按鈕,跳轉到如下頁面:

      在DaoCloud中鏡像需要運行在容器中,因為當前我們只構建了一個版本,所以選擇部署最新版本和下面的部署按鈕效果相同,點擊任意一個,來到了這里:

      我們給容器起一個霸氣的名字learndocker,然后點擊頁面最下面的立即部署按鈕,秒秒鐘,我們的應用就運行了起來:

      此時,注意到你自己運行成功的url后面的鏈接,將其復制到瀏覽器打開,你會發現,網頁的內容就是本篇博客:

      寫在最后

      Docker能做的事情遠不止這些,更多有意思的事情還請讀者慢慢用心去發現。

    40
    0
    標簽:dokcer

    云計算熱門文章

      云計算最新文章

        最新新聞

          熱門新聞

            黄色网_免费在线黄色电影_黄色成人快播电影_伦理电影_黄色片