Docker 的安裝與使用

帳號:xcj26
密碼:X*c*j*5**6**
郵箱:xcj26@126.com
 
帳號:xichji
密碼:X*c*j*5**6**
郵箱:458666015@qq.com
 

1.docker的安裝css

環境準備

Docker for Windows是一個Docker Community Edition(CE)應用程序。Docker for Windows安裝包包含了在Windows系統上運行Docker所需的一切。若是你不想裝虛擬機,想直接在你的Windows操做系統中安裝與學習使用docker,那麼你首先得查看你的系統是否知足Docker for Windows的安裝與使用要求。html

  1. Docker for Windows的當前版本運行在64位Windows 10 Pro,專業版、企業版和教育版(1607年記念更新,版本14393或更高版本)上。Ps:家庭版是不行的,若是你是家庭版,那麼一是升級到專業版,破解專業版推薦個地址:http://blog.csdn.net/SONGCHUNHONG/article/details/78006389 ,二是安裝Docker Toolbox,自行網上百度http://blog.csdn.net/tina_ttl/article/details/51372604前端

  2. 若是你知足Docker for Windows的環境條件了,那麼首先檢查電腦的虛擬化開啓了沒有:進入任務管理器(ctrl+alt+delete),點擊性能->cpu ,查看虛擬化是否已啓用,若是虛擬化是已禁用,那麼你須要重啓電腦進入bios開啓虛擬化(咱們的發的筆記本cpu都是支持虛擬化的,重啓時進入bios按esc -> 再按f12 -> 去開啓虛擬化)node

  3. 開啓虛擬化重啓後,進入任務管理器看虛擬化是否已啓用。 
    這裏寫圖片描述python

  4. 而後再是進入電腦的控制面板->程序->啓用或關閉Windows功能->把Hyper-v勾上,啓用後電腦會重啓,後面就能夠下載並安裝Docker for Windows了。 
    這裏寫圖片描述ios

下載安裝

  1. 進入網址https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows 下載並安裝。我安裝的是穩定版。安裝過程沒什麼要注意的。 
    這裏寫圖片描述nginx

  2. 啓動之後會出如今桌面的右下角區域,鼠標放上去之後顯示Docker is running表示啓動成功,第一次安裝啓用好像是會彈出個Docker Cloud登陸界面,去註冊而後登陸,使用和git有點相似,能夠pull圖像等等 
    這裏寫圖片描述git

2.docker的入門

開始使用

  1. 檢查Docker,Compose和Machine的版本 
    這裏寫圖片描述web

  2. 檢查版本信息,並確保docker命令正常工做 
    這裏寫圖片描述
    這裏寫圖片描述 
    這裏寫圖片描述redis

  3. 運行docker run hello-world以測試從Docker Hub中拉取圖像並啓動容器 
    這裏寫圖片描述

  4. 使用命令docker run -it ubuntu bash運行一個Ubuntu容器,我以前已經拉取過這個容器了,大概是幾十兆吧,因此直接啓用了,輸入exit命令中止容器 
    這裏寫圖片描述

  5. 運行命令docker run -d -p 80:80 –name webserver nginx 啓動一個Dockerized webserver 會下載nginx容器圖像並啓動它,而後再打開瀏覽器鍵入http://localhost 
    這裏寫圖片描述

  6. 運行docker ps 命令,檢查容器的詳細信息 
    這裏寫圖片描述

  7. 中止或移除容器和圖像。若是你想中止網絡服務器,輸入:docker stop webserver而後從新啓動docker start webserver。要使用單個命令中止並刪除正在運行的容器,請鍵入: docker rm -f webserver。這將刪除容器,但不是 nginx圖像。您能夠列出本地圖像docker images。你可能想要保留一些圖片,這樣你就沒必要再從Docker Hub中取出它們了。要刪除再也不須要的圖像,請使用docker rmi後跟圖像ID或圖像名稱。例如docker rmi nginx 
    這裏寫圖片描述

3.docker的經常使用配置

在PowerShell中設置 tab鍵自動補全(其實用的都是cmd.exe)

  1. 啓動一個的PowerShell(即以管理員身份運行)。搜索PowerShell,右鍵單擊,而後選擇以管理員身份運行。在PowerShell提示符下鍵入: 
    Set-ExecutionPolicy RemoteSigned
  2. 檢查策略設置是否正確,運行:get-executionpolicy 
    應該返回RemoteSigned。
  3. 安裝posh-dockerPowerShell模塊以自動完成Docker命令,鍵入:Install-Module posh-docker或者,要僅爲當前用戶安裝模塊,鍵入: 
    Install-Module -Scope CurrentUser posh-docker
  4. 安裝完成後,只能爲當前PowerShell啓用自動完成功能,輸入:Import-Module posh-docker
  5. 爲了在全部PowerShell會話中保持Tab完成狀態$PROFILE,請在PowerShell提示符處輸入:
  1.  
    if (-Not (Test-Path $PROFILE)) {
  2.  
    New-Item $PROFILE –Type File –Force
  3.  
    }
  4.  
    Add-Content $PROFILE "`nImport-Module posh-docker"

這將建立一個$PROFILE若是不存在,並將此行添加到文件中: 
Import-Module posh-docker 
要檢查文件是否已正確建立,或只需手動編輯,請在PowerShell中鍵入如下內容: 
Notepad $PROFILE 
打開一個新的PowerShell會話。如今,當你鍵入的前幾個字母后按Tab鍵,Docker命令(如開始,中止,運行及其選項)以及容器和映像名稱如今都應該自動完成。 
這裏寫圖片描述

Settings

找到右下角的docker圖標,右擊選擇settings進去

  1. General:這裏是設置docker開機自啓,應用程序啓動時檢查更新,發佈使用狀況統計信息 
    這裏寫圖片描述

  2. Advanced:分配cpu數量與內存量 
    這裏寫圖片描述

  3. Daemon:Docker for windows10 能夠配置阿里雲鏡像,到https://cr.console.aliyun.com/ 註冊一個帳戶,登陸進去後再列表選擇加速器,把你的專屬加速器地址複製粘貼到Daemon的Registry mirrors中 
    這裏寫圖片描述
    這裏寫圖片描述

4.用Dockerfile定義一個鏡像

在過去,若是你要開始編寫一個Python應用程序,你的第一步就是在你的機器上安裝一個Python運行庫。可是,這會形成您的機器上的環境必須知足必定條件以使您的應用程序能夠運行。 
使用Docker,你能夠將一個可移植的Python運行庫做爲一個映像,不須要安裝。而後,您的構建能夠將基礎Python鏡像與應用程序代碼一塊兒包括在內,確保您的應用程序,依賴項和運行時都一塊兒運行。 
這些可移植的鏡像是由一個叫作Dockerfile的東西來定義的

新建目錄文件

建立一個空目錄,我取名叫docker,而後分別在裏面新建三個文件:Dockerfile,app.py,requirements.txt 
這裏寫圖片描述

三個文件中的內容分別設計爲:

  1.  
    1.Dockerfile:
  2.  
    # Use an official Python runtime as a parent image
  3.  
    FROM python: 2.7-slim
  4.  
     
  5.  
    # Set the working directory to /app
  6.  
    WORKDIR /app
  7.  
     
  8.  
    # Copy the current directory contents into the container at /app
  9.  
    ADD . /app
  10.  
     
  11.  
    # Install any needed packages specified in requirements.txt
  12.  
    RUN pip install --trusted-host pypi.python.org -r requirements.txt
  13.  
     
  14.  
    # Make port 80 available to the world outside this container
  15.  
    EXPOSE 80
  16.  
     
  17.  
    # Define environment variable
  18.  
    ENV NAME World
  19.  
     
  20.  
    # Run app.py when the container launches
  21.  
    CMD [ "python", "app.py"]
  22.  
     
  23.  
    2.app.py:
  24.  
    from flask import Flask
  25.  
    from redis import Redis, RedisError
  26.  
    import os
  27.  
    import socket
  28.  
     
  29.  
    # Connect to Redis
  30.  
    redis = Redis(host= "redis", db=0, socket_connect_timeout=2, socket_timeout=2)
  31.  
     
  32.  
    app = Flask(__name__)
  33.  
     
  34.  
    @app.route("/")
  35.  
    def hello():
  36.  
    try:
  37.  
    visits = redis.incr( "counter")
  38.  
    except RedisError:
  39.  
    visits = "<i>cannot connect to Redis, counter disabled</i>"
  40.  
     
  41.  
    html = "<h3>Hello {name}!</h3>" \
  42.  
    "<b>Hostname:</b> {hostname}<br/>" \
  43.  
    "<b>Visits:</b> {visits}"
  44.  
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
  45.  
     
  46.  
    if __name__ == "__main__":
  47.  
    app.run(host= '0.0.0.0', port=80)
  48.  
     
  49.  
    3. requirements.txt:
  50.  
    Flask
  51.  
    Redis

構建鏡像

在docker目錄下打開cmd.exe運行命令(確保可以找到Dockerfile文件,鏡像取名叫friendlyhello): 
docker build -t friendlyhello . 
ps:千萬不要落了上面那行後面的那個點,曾經入過坑的。。命令包括後面的那個點 
這裏寫圖片描述

而後再執行命令: 
docker images 
這裏寫圖片描述

運行鏡像程序: 
docker run -p 4000:80 friendlyhello 
這裏寫圖片描述

能夠看到Python正在爲應用程序提供消息的http://0.0.0.0:80。可是,這個消息來自容器內部,它不知道咱們將該容器的端口80映射到4000,從而打開URL: http://localhost:4000 
這裏寫圖片描述

中止容器運行

首先在接着上面的操做步驟後按下ctrl+c在終端退出,這並不意味着鏡像中止運行了 
鍵入docker container ls 列出正在運行的容器 
這裏寫圖片描述 
這裏寫圖片描述

運行命令: 
docker container stop <Container NAME or ID> 
中止容器。不然,在下一步中從新運行容器時,將會收到錯誤響應。 
這裏寫圖片描述

5.聯繫Docker Hub的經常使用操做

登陸到Docker Hub

前面已經說過了,docker和git的操做有相似之處,因此docker也 
有遠程倉庫,若是前面已經註冊過並登陸了docker cloud,那麼 
訪問網址:https://hub.docker.com 在裏面建立存儲庫,不然先 
註冊吧。 
這裏寫圖片描述

push鏡像

前面在本地建立了一個friendlyhello的鏡像,如今要把它push到 
本身的docker hub的存儲庫中去,首先: 
1. 登陸docker hub (我已經登陸過了。。再登陸一次吧) 
這裏寫圖片描述 
2. 標記鏡像: 
把鏡像放入wangliguo存儲庫並標記爲test 
這裏寫圖片描述 
3. 查看鏡像: 
這裏寫圖片描述 
4. 發佈鏡像(推送鏡像) 
這裏寫圖片描述 
5. Docker Hub上查看鏡像: 
這裏寫圖片描述
6. 從遠程存儲庫中提取並運行鏡像:如今當遠程存儲庫有了鏡像後,就能夠從遠程存儲庫提取並運行了 
這裏寫圖片描述 
這裏寫圖片描述

6.服務

在分佈式應用程序中,應用程序的不一樣部分被稱爲「服務」。例如,想象一個視頻共享站點,它可能包括用於將應用程序數據存儲在數據庫中的服務,用於用戶上傳東西的視頻轉碼服務,爲前端服務等等。 
服務實際上只是「生產中的容器」。服務只運行一個鏡像,但它編碼鏡像運行的方式 - 應該使用哪一個端口,容器應該運行多少個副本,以便服務具備所需的容量,以及等等。縮放服務會更改運行該軟件的容器實例的數量,從而爲流程中的服務分配更多的計算資源。 
使用Docker平臺定義,運行和擴展服務很是簡單 - 只需編寫一個docker-compose.yml文件便可。

建立一個docker-compose.yml文件

這裏寫圖片描述 
鍵入:

  1.  
    version: "3"
  2.  
    services:
  3.  
    web:
  4.  
    # replace username/repo:tag with your name and image details
  5.  
    image: 15433/wangliguo:test
  6.  
    deploy:
  7.  
    replicas: 5
  8.  
    resources:
  9.  
    limits:
  10.  
    cpus: "0.1"
  11.  
    memory: 50M
  12.  
    restart_policy:
  13.  
    condition: on-failure
  14.  
    ports:
  15.  
    - "80:80"
  16.  
    networks:
  17.  
    - webnet
  18.  
    networks:
  19.  
    webnet:

拉取的是上個步驟中的存儲庫的tag。 
運行該鏡像的5個實例做爲一個服務調用web,限制每一個使用,最多10%的CPU(跨全部核心)和50MB的RAM。 
若是一個失敗,當即從新啓動容器。 
將主機上的端口80映射到web端口80。 
指導web容器經過一個負載平衡的網絡共享80端口webnet。(在內部,容器自己將web在臨時端口上發佈到 端口80)。 
webnet使用默認設置(這是一個負載平衡覆蓋網絡)定義網絡。

運行新的負載均衡應用程序

先運行命令:docker swarm init 
這裏寫圖片描述 
而後再運行命令:docker stack deploy -c docker-compose.yml getstartedlab 
給它取名叫getstartedlab 
這裏寫圖片描述 
服務堆棧在這臺主機上運行了5個部署鏡像的容器實例 
運行命令查看:docker service ls 
這裏寫圖片描述
在服務中運行的單個容器稱爲任務,能夠看到上面有個getstartedlab_web的服務 
運行命令docker service ps getstartedlab_web 查看此服務下的任務: 
這裏寫圖片描述
若是隻列出系統中的全部容器,也會顯示任務,但不會被服務過濾: 
運行命令:docker container ls -q 
這裏寫圖片描述 
而後打開瀏覽器,鍵入http://localhost 
這裏寫圖片描述 
點擊刷新屢次,能夠發現Hostname的更改,以循環方式選擇5個任務中的一個來響應。容器ID將與前一個命令(docker container ls -q)的輸出相匹配。

更改應用程序

好比更改docker-compose.yml中的replicas值,保存更改並從新運行docker stack deploy命令來更新應用程序: 
這裏寫圖片描述 
運行命令: 
docker stack deploy -c docker-compose.yml getstartedlab 
這裏寫圖片描述 
Docker會作一個就地更新,而後從新運行docker container ls -q以查看從新配置的已部署實例 
這裏寫圖片描述 
能夠看到以前是6個,如今是7個,恰好多了一個任務 
ps:電腦中還運行這以前步驟中從docker hub中拉取並運行着的那個任務,因此會看到6個和7個

關閉應用程序和羣

關閉應用程序docker stack rm getstartedlab 
這裏寫圖片描述 
關閉羣docker swarm leave –force 
這裏寫圖片描述 
如今服務中的任務都關閉了之後再運行命令: 
docker container ls -q 
這裏寫圖片描述 
這就是上面說的那個以前步驟中從docker hub中拉取並運行着的那個任務

7.集羣

瞭解集羣

swarm是運行Docker並加入到一個集羣中的一組機器。可是如今它們將由羣集管理器在羣集上執行。羣體中的機器能夠是物理的或虛擬的。加入羣體後,他們被稱爲節點。 
Swarm管理人員可使用多種策略來運行容器,好比「最空的節點」(emptiest node) - 它使用容器填充最少使用的機器。或「全局」,這確保了每臺機器只能獲得指定容器的一個實例。您能夠指示swarm manager在Compose文件中使用這些策略。 
羣體管理者是羣體中惟一能夠執行你的命令的機器,或者受權其餘機器做爲工做者加入羣體。工人提供能力,並無權力告訴任何其餘機器能夠作什麼和不能夠作什麼。 
到目前爲止,以前都是在本地機器上以單主機模式使用Docker。可是Docker也能夠切換到羣集模式,這就是使用羣集的緣由。啓用羣模式使當前機器成爲羣管理器。則Docker將運行您正在管理的羣集上執行的命令,而不只僅是在當前的機器上。

建立一個集羣

一個羣由多個節點組成,能夠是物理機或虛擬機。基本的概念很簡單:運行docker swarm init啓用羣模式,使當前的機器成爲羣管理器,而後docker swarm join在其餘機器上運行 ,讓它們做爲工人加入羣體。下面將使用虛擬機快速建立一個雙機羣集,並將其變成羣集。 
步驟: 
1. 以管理員運行cmd.exe 這裏必須是管理員運行,否則後續操做權限不夠 
這裏寫圖片描述 
2. 運行docker swarm init啓用羣模式,使當前的機器成爲羣管理器,而後docker swarm join在其餘機器上運行 ,讓它們做爲工人加入羣體。 
3. 啓動Hyper-V管理器 
點擊開始windows管理工具Hyper-V管理器 
這裏寫圖片描述 
4. 單擊右側菜單中的虛擬交換機管理器 
這裏寫圖片描述
5. 單擊建立類型爲外部網絡的虛擬交換機,給它的名稱myswitch,並檢查框共享您的主機的活動網絡適配器 
這裏寫圖片描述 
6. 使用節點管理工具建立幾個虛擬機docker-machine: 
docker-machine create -d hyperv –hyperv-virtual-switch 「myswitch」 myvm1 
docker-machine create -d hyperv –hyperv-virtual-switch 「myswitch」 myvm2 
這裏寫圖片描述 
以前我已經建立過了,因此我如今再新建兩個:myvm3 和 myvm4 
docker-machine create -d hyperv –hyperv-virtual-switch 「myswitch」 myvm3 
docker-machine create -d hyperv –hyperv-virtual-switch 「myswitch」 myvm4 
這裏寫圖片描述 
這裏寫圖片描述 
這裏寫圖片描述 
7. 如今建立了兩個虛擬機,分別命名爲myvm3和myvm4。使用命令 
docker-machine ls 列出機器並獲取其IP地址。 
這裏寫圖片描述

初始化羣並添加節點

  1. 先使用命令docker-machine ssh myvm3 
    這裏寫圖片描述 
    而後讓myvm3 成爲一個管理員:docker swarm init 
    注意紅框中的內容,這是後面的myvm4 加入集羣要執行的命令 
    這裏寫圖片描述
    運行命令:docker node ls 
    這裏寫圖片描述
    能夠看到myvm3 已經成爲管理員了

  2. 以管理員身份再運行一個cmd.exe.而後運行命令:docker-machine ssh myvm4 
    這裏寫圖片描述 
    而後再運行命令:(這就是上一頁中圖片裏紅框中的內容,下面的token是我這裏的,正常運行到這裏的時候是去myvm3的docker swarm init命令中把紅框框位置裏的命令複製粘貼過來執行)

docker swarm join --token SWMTKN-1-0csyw4yz6uxob90h0b8ejoimimrgisiuy9t2ugm8c1mxfvxf99-7q7w5jw1mrjk1jlri2bcgqmu8 10.211.106.194:2377

 

這裏寫圖片描述 
而後再切換到myvm3 的cmd.exe中執行命令:docker node ls 
這裏寫圖片描述 
能夠看到,咱們已經建立了一個簡單的集羣。、

附離開羣命令:docker swarm leave

在集羣上部署應用程序

  1. docker-machine爲swarm管理器配置一個shell 
    運行命令:docker-machine env myvm3 
    這裏寫圖片描述 
    注意最後一行的內容 
    我這裏是@FOR /f "tokens=*" %i IN ('docker-machine env myvm3') DO @%i 
    複製粘貼運行它 
    這裏寫圖片描述 
    再運行docker-machine ls以驗證它myvm3 是否爲活動機器 
    這裏寫圖片描述

  2. 在swarm管理器上部署應用程序 
    以部署咱們以前docker-compose.yml服務爲例 
    這裏寫圖片描述 
    首先在這個以管理員身份打開的cmd中進入到docker-compose.yml文件的所在的目錄中去,個人由於在D/docker中,若是不過來,那麼執行命令: 
    docker stack deploy -c docker-compose.yml getstartedlab會出現: 
    這裏寫圖片描述 
    進入目錄後執行上面那條命令: 
    這裏寫圖片描述 
    再執行命令docker stack ps getstartedlab 查看服務詳情: 
    這裏寫圖片描述
    若是發現state存在shutdown的狀況(也有可能出現你的圖片上的實例數量大於你在服務文件中定義的數量的狀況,這都是我爬過的坑,如今我這裏定義的是6,圖片上也是6,),那應該是你在以前服務哪一章運行過命令: 
    docker stack deploy -c docker-compose.yml getstartedlab 而沒有把getstartedlab移除掉 
    這時應該執行命令:docker stack rm getstartedlab 把getstartedlab移除掉 
    Ps:我是d,c盤都執行了這個命令,由於以前運行docker stack deploy -c docker-compose.yml getstartedlab命令是在d盤的時候 
    而後從新運行:docker stack deploy -c docker-compose.yml getstartedlab 和 
    docker stack ps getstartedlab 就行了

  3. 瀏覽器訪問集羣的網址: 
    如圖紅框框所示,瀏覽器上訪問其中的任何一個,而後刷新,將看到6個可能的容器ID,它們都是隨機循環的,展現了負載平衡 
    這裏寫圖片描述

  4. 其餘的一些命令:
  1.  
    好比說若是修改了 docker-compose.yml文件後,執行命令:
  2.  
    docker stack deploy -c docker-compose.yml getstartedlab
  3.  
    再次運行以部署這些更改便可
  4.  
    好比說前面提到的移除應用程序: docker stack rm getstartedlab
  5.  
    離開羣: docker swarm leave –force
  6.  
    從新啓動已中止的虛擬機,執行:
  7.  
    docker-machine start <machine-name>

 

這裏寫圖片描述

8.參考文檔

https://docs.docker.com/ 
http://blog.csdn.net/tina_ttl/article/details/51372604 
http://blog.csdn.net/u011686226/article/details/53906976 
http://blog.csdn.net/heatdeath/article/details/70432417 
http://blog.csdn.net/fromsilence520/article/details/73480219

相關文章
相關標籤/搜索