docker是一門虛擬化容器技術,其設計理念是"build once, run anywhere"(一次構建,處處運行),聽起來,是否是跟java的"wirte once, run anywhere"(一次編寫,處處運行)很像?那麼,什麼是虛擬化容器技術呢?docker 將應用程序與該程序的依賴,打包在一個文件裏面。運行這個文件,就會生成一個虛擬容器,程序在這個虛擬容器裏運行,就好像在真實的物理機上運行同樣。有了 Docker,就不用擔憂環境問題。正如開篇第一張圖docker的標誌同樣,docker就是這條鯨魚,其上馱着的集裝箱,就是一個個互相隔離的容器,你能夠隨時往上添加集裝箱,不會影響到原有集裝箱裏的內容。html
docker 和傳統虛擬化方式的不一樣之處,傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所需應用進程;而容器內的應用進程直接運行於宿主的內核,容器內沒有本身的內核,共享宿主機的內核,並且也沒有進行硬件虛擬。所以容器要比傳統虛擬機更爲輕便。 java
docker能夠在各個操做系統上安裝,過程很簡單,安裝教程請看這裏:www.runoob.com/docker/wind… docker在windows上安裝是一件麻煩事,但不想在vm虛擬機中的linux上安裝由於懶得開,因此仍是在windows上安裝了,windows上有兩種安裝方法:linux
這是安裝docker toolbox遇到的卡在下載boot2docker.iso的問題,安裝docker其餘版本的這節能夠忽略不看。 docker toolbox安裝完成後,會有以下三個圖標, git
啓動docker須要點擊Docker Quickstart,其會查找指定目錄下的boot2docker.iso(一個輕量級的linux虛擬機)文件,並根據該文件建立一個名爲default的linux虛擬機,初次點擊時找不到該文件,會從github下載,但docker下載速度至關慢,等了個把小時都沒法完成。提示以下:Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v1.12.1
(default) Downloading C:\Users\huang\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.12.1/boot2docker.iso...
複製代碼
解決方案是:使用瀏覽器(或者迅雷)到boot2docker的主頁下載最新版boot2docker.iso,地址:(github.com/boot2docker…),以下圖: github
下載完成後斷開網絡,將下載好的boot2docker.iso放到提示的位置,我這裏是:C:\Users\huang\machine\cache\
目錄。記住要斷開網絡,從新點擊Docker Quickstart圖標啓動docker便可,啓動完成便可鏈接網絡,開始學習docker了。
對boot2docker感興趣的能夠看看其github的介紹,boot2docker是一個輕量級的、用於運行docker容器的linux系統,徹底在內存中運行,大小隻有45m左右,啓動迅速。因此在windows中運行docker,其原理是使用啓動了一個linux虛擬機,該虛擬機中安裝了docker,點擊Docker Quickstart後,咱們能夠看到控制檯的輸出,該虛擬主機名爲default,默認的ip是192.168.99.100。再從github中的介紹能夠看到,該虛擬機有docker用戶,密碼爲tcuser。所以,咱們能夠從secureCRT或者git bash中使用ssh登陸到該機器,在上面使用docker命令。固然你能夠在default虛擬機中安裝vim等工具,可是因爲其是內存操做系統,重啓後這些新安裝的工具都會消失。 web
遠程登陸命令:ssh docker@192.168.99.100
# 密碼
tcuser
複製代碼
這一節能夠暫時不看,等你以爲docker下載太慢時,能夠看個人另外一篇文章,配置鏡像加速,地址爲:www.jianshu.com/p/aff1a4a47…docker
這裏我想先從docker的架構圖和幾個重要的概念提及,最後再說具體的命令,這樣方便你們知道每一條命令的意思和執行過程。看完這篇文章後 ,推薦一個docker教程,不長,連接在文章最下方的參考資料。 vim
如上圖,docker採用的是C/S架構。客戶端向服務器發送請求,服務器負責構建、運行和分發容器。客戶端和服務器能夠運行在同一個Host上,客戶端也能夠經過socket或者REST API與遠程的服務器通訊。對照上圖,涉及到的概念以下:綜上,結合上圖,整個docker架構交互流程爲:啓動docker,docker以守護進程的方式運行在linux主機上(docker toolbox下爲boot2docker虛擬出來的linux上),咱們發送docker命令給到docker daemon執行,docker能夠從docker hub中拉取所須要的image,再根據image建立出container。windows
知道了上面docker架構的交互流程了,我這裏以運行一個tomcat容器爲例,一步步介紹經常使用的命令:瀏覽器
docker images
:列出當前docker中有哪些鏡像,若是是第一次執行,固然就沒有鏡像了。docker search tomcat
:在docker hub中搜索tomcat鏡像。固然你能夠在瀏覽器中訪問docker hub,地址爲:(hub.docker.com/),就像訪問maven的遠程倉庫同樣,能夠搜索你須要的內容。
docker pull tomcat
:拉取最新版的tomcat鏡像到本地,下載完成後再使用docker images就能看到感下載的鏡像了。docker run --name mytomcat -p 8080:8080 -d tomcat
:根據tomcat鏡像運行出一個tomcat實例,執行兩遍就有兩個實例了(注意改端口),--name表示爲這個實例命名,-p 8080:8080表示將本地的8080端口綁定到容器中的8080端口,才能使用localhost:8080(docker toolbox是192.168.99.100:8080)訪問到tomcat端口。-d表示後臺運行。docker run --name mytomcat03 -p 8082:8080 -it tomcat /bin/bash
:-it以交互、附加模式啓動並進入容器後執行/bin/bash命令,不之後臺運行,進入容器後執行exit命令後,會退出容器,此時使用docker ps -a命令查看會顯示爲exit狀態。ctrl+p+q
:退出可是後臺運行,如上一個命令,執行exit退出後容器就會退出,此時若不想容器退出,可按這一組快捷鍵。docker ps -a
:顯示全部容器狀態,docker ps只顯示運行中的容器,-a表示顯示全部容器,包括已退出的容器。這時就能看到剛剛啓動的tomcat了。docker logs -f mytomcat
:查看剛剛啓動的tomcat打出來的日誌,-f表示跟蹤滾動日誌打印。docker exec -it mytomcat /bin/bash
:exec表示執行命令,命令最後須要帶將要執行的命令,如/bin/bash,-it表示以交互、附加模式啓動返回一個終端,/bin/bash表示進入容器後首先執行的命令。這條命令執行後就登陸到了容器內部,該容器中就是tomcat應用。就像使用ssh登陸到容器內部同樣。這時候你能夠修改容器內部的配置文件,固然,生產環境不建議這麼作,而是使用配置文件外部掛載的方式。docker stop mytomcat
:中止mytomcat實例,不會刪除容器內的東西。docker start -i mytomcat
:啓動已中止的mytomcat實例,若是啓動前修改了容器內的配置文件,此時從新啓動會從新加載該配置,若是該配置文件是linux宿主機級別的,如/etc/profile文件,則不會加載,由於容器是共享宿主機的配置的。-i表示啓動並進入交互命令界面。docker rm mytomcat
:刪除已中止的mytomcat實例docker run --name mytomcat02 -p8081:8080 -e JAVA_HOME=/path/to/java/home -v /host/path/file:/container/path/file -d tomcat
:-e表示設置環境變量JAVA_HOME,進入到容器中,使用echo $JAVA_HOME能夠看到該環境變量的值。-v表示掛載宿主機的/host/path/file到容器中的/container/path/file,修改宿主機的文件時,容器中的文件也會修改。若是使用的是docker toolbox,則宿主機掛在的文件須要在當前用戶目錄下,即c:\user\yourname下才行,不然不會報錯但沒法掛載成功,當時被這個問題坑了一個下午。docker cp /host/path/file mytomcat02:/container/path/file
:複製宿主機文件到容器中,能夠用於當修改了容器配置文件後,配置文件錯誤致使沒法啓動時,複製配置文件到宿主機修改配置,而後從新複製回容器便可。docker inspect mytomcat
:查看容器信息,包括容器ip等信息。假如咱們下載了tomcat鏡像並啓動了容器實例,並在tomcat容器中修改了配置文件。這時,咱們能夠把配置文件也一塊兒打包作成鏡像,發到另外的機器直接執行,就不用再單獨對每一臺機器配置了。docker提供了兩種方式來構建鏡像,以下:
dockerfile文件方式構建須要編寫dockerfile,也只有幾個命令,不難,請自行查閱資料。此處講下docker commit命令。 docker commit mytomcat huangzb/tomcat
:將當前的mytomcat容器提交爲鏡像,鏡像名爲huangzb/tomcat
熟悉docker的網絡結構是至關重要的,由於這樣咱們就能夠作集羣啦。廢話很少說,那就直入主題吧。
docker的網絡使用了linux網絡中的bridge(網橋)和veth(virtual ethernet虛擬以太網)虛擬設備。
由上,docker中新建的容器默認都使用了docker0網橋鏈接了起來,全部默認的,docker建立的全部容器都在一個網絡中,互相能夠訪問。
以上。有興趣的同窗能夠學習下面的參考資料。