1. 程式人生 > >win10下Docker初識

win10下Docker初識

說明

  1. 使用平臺win10 1709版本,提示如果你的也是win10系統,而且版本較低可能也會提示xxxpro什麼的,意思就是你的電腦版本不對。
  2. docker使用Linux containers 可以使用docker version檢視資訊,單擊小鯨魚switch to xxxx 進行切換

什麼是Docker

定義

根據百度百科定義: Docker(應用容器引擎) 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何介面。

組成要素

  1. dockerClient客戶端
  2. Docker Daemon守護程序
  3. Docker Image映象
  4. DockerContainer容器

侷限

Docker並不是全能的,設計之初也不是KVM之類虛擬化手段的替代品,簡單總結幾點: Docker是基於Linux 64bit的,無法在32bit的linux/Windows/unix環境下使用 LXC是基於cgroup等linux kernel功能的,因此container的guest系統只能是linux base的 隔離性相比KVM之類的虛擬化方案還是有些欠缺,所有container公用一部分的執行庫 網路管理相對簡單,主要是基於namespace隔離 cgroup的cpu和cpuset提供的cpu功能相比KVM的等虛擬化方案相比難以度量(所以dotcloud主要是按記憶體收費) Docker對disk的管理比較有限 container隨著使用者程序的停止而銷燬,container中的log等使用者資料不便收集

同類產品

CoreOs釋出的一個名為Rocket。

為什麼會出現

解決了什麼問題

有了Docker,開發人員不再需要為處理各種開發、 測試、生產環境的差異而花費大量精力,他們可以將一個乾淨的開發環境直接遷移到生產環境,而不必擔心各種依賴和配置問題。這有效的解決了開發者經常面臨的“依賴陷阱”。(來源)總的來說:Docker解決了執行環境和配置問題,方便釋出,也就方便做持續整合。更輕量的虛擬化,節省了虛擬機器的效能損耗

未出現前怎麼解決

額,說說在我不知道有這項技術之前部署自己的部落格系統吧。各種環境配置,jdk,mysql,tomcat,nginx...需要一個個下載安裝,配置,檢查是否有問題,真的是相當麻煩。

怎麼做?Demo

設定映象源

image

第一個映象hello-world

  1. dos命令下輸入命令docker images 即可檢視目前所有映象
  2. 獲取第一個映象hello-world 命令docker pull hello-world pull是拉的意思,和git中的pull拉倉庫的程式碼很相似吧。同樣的也對應一個命令push(推)
  3. 執行映象 docker run hello-world 執行結果如下

image

其實執行一個映象命令不僅僅如此簡單,更詳細的操作可以使用docker run --help檢視所有命令

第二個映象執行nginx

那麼映象我們去哪裡下載呢?docker官方有一個倉庫,其實理解起來和maven的中央倉庫一樣,我們需要什麼去中央倉庫拿就好了。官方網址

  1. 下載nginx映象,在頁面詳情頁獲取Docker Pull Command(命令) 下載成功

image

  1. 執行nginx 使用命令docker run -d nginx -d的意思是在後臺執行。啟動後看看狀態,使用命令docker ps

  2. 試試在瀏覽器輸入127.0.0.1 這個時候nginx還是訪問不了的,請先操作下面

  3. 如果我們想知道容器內部怎麼辦?可以使用命令docker exec docker exec --help 看一下幫助資訊

  4. 使用命令docker exec -it be 注意:這個be是我執行nginx映象後獲取的一個id,而be只是前兩位,注意第2點的docker ps 映象nginx的CONTAINER ID(容器ID) 因為只啟動了一個映象,所以我輸入be就能識別我要執行的映象

image

  1. 進入後你會發現和Linux系統好像呀!其實就是一個虛擬Linux系統好嘛! 熟悉的Linux命令

image

7.退出容器命令exit

Docker網路

特別說明:圖片引用來自慕課網

imageimage

還記得在步驟 第二個映象執行nginx的第三點嗎?試試在瀏覽器輸入127.0.0.1.....但是無法訪問對吧。 通過本地8080埠對映docker容器中的80埠 此時就可以訪問docker中的nginx。 命令

docker run -d -p 8080:80 nginx

再次在瀏覽器訪問127.0.0.1:8080 ,成功訪問nginx

image

製作自己的映象並部署

建立一個資料夾,改資料夾下包含Dockerfile檔案和Jpress.war包

image

  1. 製作自己的Dockerfile檔案 在Dockerfile檔案寫入一下資訊。注意這個檔案沒有後綴,可以建立一個txt檔案在重複名去掉txt字尾即可
from tomcat

MAINTAINER peng [email protected]163.com

COPY jpress.war /usr/local/tomcat/webapps

意思是需要tomcat(會預設下載jdk,免去下載jdk的步驟) 映象所有者資訊 釋出到tomcat/webapps目錄下 如果你是按照步驟來的,那麼tomcat映象沒下載吧。前面的步驟還記得嗎?拉取tomcat映象,命令docker pull tomcat

  1. 我們需要部署自己的web應用到伺服器這裡我們使用Jpress部落格系統作為我們測試的應用。 在GitHub下載war包Github-JPress-War包下載
  1. 建立映象使用命令 docker build .
    注意 . 表示當前目錄,給映象起一個名字(準確說是加一個標籤) docker build -t jpress:latest .

使用命令docker images 檢視映象jpress成功。注意我的jpress錯了,標籤應該為latest,一開始打錯了..

image

  1. 執行tomcat 此時執行tomcat映象jpress就可以訪問了!命令
docker run -d -p 8888:8080 jpress

image

  1. 拉取MySQL並設定資料庫密碼,建立jpress資料庫 由於jpress部落格框架的執行需要MySQL資料庫的支援,同樣的去映象庫獲取pull命令,下拉到自己的倉庫即可。 MySQL相關命令的操作在MySQL都有說明。使用命令
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=a -e MYSQL_DATABASE=jpress mysql

注意!如果你的電腦安裝了MySQL並且啟動了MySQL服務,此時會報錯,解決方案是換個埠即可。

  1. 連線資料庫 如果資料庫主機為localhost無法連線資料庫,則改為IP地址。檢視本機IP地址方法cmd命令下inconfig ,注意此時的埠號應該改為3307.安裝成功!

image

  1. 重啟web容器 檢視容器執行情況 docker ps 執行命令docker restart CONTAINER ID(容器ID) 即可訪問jpress啦

image

Over!牛逼的技術,在學習路上...

前段時間在微博看到他人分享關於Docker的原理分析,移步學習Docker 核心技術與實現原理