容器如今應用的愈來愈多了,不懂這個都很差意思說本身是個程序員了。這篇文章就給你們帶來一個簡單易懂的Docker入門。程序員
你們可能用過虛擬機,Vmware之類的,感受和容器差很少,都是「虛擬化一臺機器」。那咱們先解釋下,Docker和虛擬機有啥區別,先上圖:golang
虛擬機在被建立的時候,宿主機會模擬出一臺真實機器所須要的全部資源,包括硬件。一旦開啓,預分配給它的資源會被徹底佔用。每一臺虛擬機都擁有一套完整的獨立的用戶操做系統。docker
容器就不同了,它不是模擬一個完整的操做系統,而是對進程進行隔離。容器包含了應用和它全部的依賴包,可讓資源在受到隔離的進程中運行應用程序。容器和容器之間是共享內核的。bash
其實從上面的說明就能夠看出來了,容器比虛擬機須要的資源更少,帶來的優點包括更快的啓動,一樣硬件條件下能運行的實例數量遠高於虛擬機等等。而Docker則是對容器技術進行的一種封裝,它是目前最流行的容器解決方案。服務器
鏡像是Docker容器的模板。它看起來像一個文件系統,提供了容器運行的時候所須要的程序、庫、配置、環境變量等。鏡像不包含任何動態數據,其內容在構建以後也不會被改變。架構
容器是能夠獨立運行的一個或一組應用。app
倉庫是存放鏡像文件的地方,概念相似Git。而倉庫註冊服務器(Registry)能夠理解爲代碼倉庫(Github)。ui
簡單的說,咱們把應用還有須要的環境配置等,「打包」成一個鏡像,這個鏡像就存在於本地的倉庫中。須要運行應用的時候,將容器指定到對應的鏡像去運行就能夠了。 DockerHub上有很多基礎鏡像,均可以直接拿來用。spa
若是想從0開始構建本身的鏡像,咱們就須要本身編寫Dockerfile了,下面貼了一個例子。操作系統
FROM golang:latest
WORKDIR $GOPATH/go-app
COPY . $GOPATH/go-app
RUN go build .
EXPOSE 8000
ENTRYPOINT ["./go-app"]
複製代碼
下面說說這幾行都幹了啥:
有了這些命令,接下來咱們就能經過docker build命令構建本身的鏡像了。
"-t" 指定了鏡像的名稱 "." 表示當前構建的目錄。如今咱們能夠經過docker images命令,查看已經構建完成的鏡像。
有了鏡像,咱們如今就能夠用來運行容器了。
"-p port1:port2" 指定了端口映射,port1是宿主機,port2是容器端口。"go-app"是咱們建立的鏡像名稱。
這個例子就完了,So easy~
以上只是一個簡單的入門,後續會帶來更多Docker實戰內容。