Docker簡明教程

來源: saymagic  發布時間: 2016-01-02 14:15  閱讀: 36278 次  推薦: 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
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()