docker 學習筆記(2)

docker

Containerizing an application

workflow

  1. 首先建立 Docker image,爲應用程序的每一個組件建立和測試單獨的 container
  2. 將您的容器和支持基礎架構組裝成一個完整的應用程序,以 Docker stack file 或 Kubernetes YAML 表示
  3. 測試,共享和部署完整的容器化應用程序

create image

  1. Clone 一個示例項目:node

    git clone -b v1 https://github.com/docker-training/node-bulletin-board
    cd node-bulletin-board/bulletin-board-app
  2. 包含源代碼和 dockerfile 文件:git

    FROM node:6.11.5    
    
    WORKDIR /usr/src/app
    COPY package.json .
    RUN npm install    
    COPY . .
    
    CMD [ "npm", "start" ]

    編寫 Dockerfile 是容器化應用程序的第一步。您能夠將這些 Dockerfile 命令視爲有關如何構建映像的逐步指南。此步驟採起如下步驟:github

    • 啓動FROM先前存在的node:6.11.5圖像。這是由 node.js 供應商構建的官方映像,並已由 Docker 驗證爲包含節點6.11.5解釋器和基本依賴項的高質量映像。
    • 使用WORKDIR指定的後續操做應該從目錄中取/usr/src/app 你的映像文件系統(從不主機的文件系統)。
    • COPY``package.json從您的主機到.圖像中當前位置()的文件(所以在此狀況下爲/usr/src/app/package.json
    • RUN``npm install映像文件系統內的命令(將讀取該命令package.json以肯定應用程序的節點依賴性,並安裝它們)
    • COPY 在應用程序其他部分的源代碼中,從主機到圖像文件系統。
  3. node-bulletin-board/bulletin-board-app目錄下,執行此命令建立一個 image: docker image build -t bulletinboard:1.0 .docker

  4. 根據新的 image 啓動容器:docker container run --publish 8000:8080 --detach --name bb bulletinboard:1.0 ,咱們在這裏使用了幾個常見的標誌:npm

    • --publish 要求Docker將主機端口8000上傳入的流量轉發到容器的端口8080(容器具備本身的專用端口集,所以若是咱們要從網絡訪問一個端口,則必須以這種方式將流量轉發給它;不然,防火牆規則將阻止全部網絡流量到達您的容器,這是默認的安全狀態)。
    • --detach 要求Docker在後臺運行此容器。
    • --name讓咱們指定一個名稱,在之後的命令中,咱們可使用該名稱來引用咱們的容器bb

    還要注意,咱們沒有指定咱們要運行容器的進程。咱們沒有必要,由於咱們CMD在構建Dockerfile時使用了指令。所以,Docker知道npm start在容器啓動時會自動運行該過程。json

  5. 訪問 localhost:8000 ,看到公告板應用程序已啓動並正在運行安全

  6. 刪除容器: docker container rm --force bb網絡

  7. 還能夠基於已有的 image 建立新的 image:在已有的 image 中操做以後,執行 docker commit -m="description" -a="author" containerID imageName架構

  8. 能夠在 registry 中存儲和管理 imageapp

部署到 kubernetes

  1. 編輯 yaml 文件,如 bb.yaml內容
  2. kubectl apply -f bb.yaml
  3. kubectl get deployments
  4. kubectl get services
  5. 訪問 localhost:30001
  6. 刪除應用程序: kubectl delete -f bb.yaml

configure networking

分類

  • bridge :須要多個容器在同一Docker主機上進行通訊時
  • host:當網絡堆棧不該與Docker主機隔離時,但但願容器的其餘方面隔離時
  • overlay:須要在不一樣Docker主機上運行的容器進行通訊時,或者當多個應用程序使用集羣服務一塊兒工做時
  • macvlan:從VM設置遷移或須要容器看起來像網絡上的物理主機(每一個主機都有惟一的MAC地址)時
  • none:一般與自定義網絡驅動程序一塊兒使用,none不適用於羣體服務
  • 網絡插件:能夠將Docker與專用網絡堆棧集成
  • 經常使用命令:
    • 參考
    • docker network create --driver bridge net1
    • docker network inspect net1
    • docker network ls
    • docker network rm net1
    • docker network connect net1 container1
    • docker network disconnect net1 container1
    • docker network prune

bridge

  • 可使用默認的 bridge 網絡,也能夠自定義,參考

overlay

  • 參考
  • 集羣中,兩個主機上的容器,經過兩個主機之間的相同的覆蓋網絡通訊

docker cp

  • 從容器複製文件或目錄到宿主機: docker cp container1:path <path>
  • 從宿主機複製文件或目錄到容器:docker cp <path> container1:path

docker compose

intro

Compose 是用於定義和運行多容器 Docker 應用程序的工具。經過 Compose,可使用YAML文件來配置應用程序的服務。而後,使用一個命令,就能夠從配置中建立並啓動全部服務。

基本分三個步驟:

  • 編寫 Dockerfile 定義環境
  • 編寫 docker-compose.yml 定義 app 的服務
  • 運行 docker-compose up ,使用 compose 啓動運行服務
  • 參考

經常使用命令:

  • docker-compose up docker-compose up -d(後臺運行)

  • docker-compose down(刪除)

  • docker-compose ps

  • docker-compose stop(中止)

  • docker-compose run cmd 執行服務的某一個命令

相關文章
相關標籤/搜索