【編者的話】本文是作者學習Docker的筆記,涉及在Windows上的安裝,介紹了映象和容器的知識和基本操作,適合Docker初學者。
介紹
也許你已經聽說過Docker,這裡我不打算深入介紹Docker是什麼以及它的工作原理。如果你從未聽說過Docker,這篇文章會幫助你熟悉Docker。如果你瞭解Docker的話我們從一些基本的功能說起:映象和容器以及如何使用它們解決真實場景中的問題,比如想要學習一門很棒的語言又不希望花太多時間在安裝語言和環境搭建上。
繼續之前,需要說明三點:
- 這個系列是關於基本操作的,目的在於介紹概念,為深入學習做鋪墊。
- 我並不是這個領域的專家,甚至也不高階。實際上我是初學者並且也沒有在任何重要專案中使用過Docker。我想看到後一句話很多人已經不打算看了。
- 我正在使用Windows系統,所以我的操作是在Windows上進行的。這並不意味著你不能在Mac或Linux上參考本文,實際上只有安裝部分不同,其餘的應該是一樣的。
安裝
參考官方安裝指導,如果是Windows,會有兩個選項:直接安裝Docker或者Docker Toolbox(Docker工具箱)。需要注意新版本Docker需要64-bit Windows 10 Pro並且支援Microsoft Hyper-V。如果你的Windows版本比較老,安裝Toolbox,它相容Oracle Virtual Box。
當使用新版本Docker時,你會得到提示:
如果你使用Docker Toolbox,會有很多工具,其一是Docker Quickstart Terminal。
如果安裝原生的Docker,你可以在最愛的終端中執行Docker命令,如果是Toolbox,在Quickstart Terminal中輸入命令。
另一件需要注意的點在於,原生安裝Docker時通過localhost訪問容器中的webapps,如果是Toolbox,你需要注意啟動Quickstart Terminal時的輸出資訊,它會給你容器的IP,在我的電腦上是192.168.99.100。
快速總結下,在Windows上你有兩個選擇:
- 原生Docker,你需要64-bit Windows 10 Pro並且支援Microsoft Hyper-V,你會有Docker的系統圖示,能在任何終端中輸入Docker命令
- Docker Toolbox,你的Windows版本低時的選擇。需要安裝Oracle Virtual Box,啟動Quickstart Terminal後輸入Docker命令。
使用
假設一個簡單但是貼近現實的例子:學習基於JVM的語言Scala。在成為專家前,你總是需要學習很多新的知識,你要參考很多基本的入門指南,需要一個REPL執行操作,但是你不希望在自己的電腦上下載安裝Scala。那麼如何使用Docker解決這個問題?很簡單,你只需要執行一個包含Scala和相關依賴的容器即可。
如果你是開發者,可以很容易理解映象和容器的區別,容器相對於映象就像物件相對於類。
映象是從網路上下載的不可變檔案,它描述瞭如何構建特定的容器。它們可能很大,所以要分模組構建以便在網路上傳輸。容器是映象的例項,Docker啟動容器後執行映象中指定的指令。
在我們的例子中,我們需要搜尋Scala映象並啟動容器。
搜尋映象
兩個選項,直接在Google搜尋Scala docker image或者執行命令docker search scala。
我們以上圖中第一個映象為例,可以登入docker hub(hub.docker.com/r/hseeberge…
如何啟動容器
啟動容器的命令是:docker run -it hseeberger/scala-sbt
執行docker run --help
可以檢視更詳細的資訊:
- -i表示互動式,STDIN會被開啟,即使我們沒有附著到容器上
- -t表示tty,我們會得到一個偽tty與容器互動
-it經常結合在一起使用。run命令執行結束後你會看到如下內容:root@3d5b83c7ea03:~#
做了這麼多麻煩事就得到一個命令列提示符?顯然不,這裡你得到的新容器的shell,時刻準備接收命令。如果執行ls,會看到一個scala-2.12.2目錄,我們進入這個目錄然後執行scala,然後得到scala REPL,在這裡就可以實戰學習scala了。Ctrl+C
退出REPL,exit退出容器。
如何做得更好
我們可以使用第二個映象,然後直接執行docker run -it williamyeh/scala
命令就可以得到scala REPL了。為何執行兩個映象得到不同的結果?我會在下一篇文章中介紹。
總結一下,執行容器只需要簡單執行命令docker run -it your/image
,執行的容器會做什麼取決於你的映象了。
有用的命令
- docker ps:列出所有正在執行的容器
- docker image ls:列出所有的映象
- docker stop
:暫停容器 - docker rm
:刪除容器
原文連結:Docker basics - finding an image and running a container(翻譯:盧文泉)