Docker 系列五(Docker Compose 項目).

来源:https://www.cnblogs.com/jmcui/archive/2018/08/01/9395375.html
-Advertisement-
Play Games

一、概念 Docker Compose 是官方編排項目之一,負責快速的部署分散式應用。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一種相關聯的應用容器為一個項目。 Docker Compose 中有兩個重要的概念: 服務 (service):一個應用 ...


一、概念

    Docker Compose 是官方編排項目之一,負責快速的部署分散式應用。它允許用戶通過一個單獨的 docker-compose.yml 模板文件(YAML格式)來定義一種相關聯的應用容器為一個項目。

    Docker  Compose 中有兩個重要的概念:

服務 (service):一個應用的容器,實際上可以包括若幹運行相同鏡像的容器實例。
項目 (project):由一組關聯的應用容器組成的一個完整業務單元,在 docker-compose.yml 文件中定義。

    Docker Compose 的安裝可以參考上一篇文章的內容。

二、Compose 命令說明

    對於 Compose 來說,大部分命令的對象既可以是項目本身,也可以指定為項目中的服務或者容器。如果沒有特別的說明,命令對象將是項目,這意味著項目中所有的服務都會受到命令影響。

    以下常用命令在 docker-compose.yml 同級目錄下執行,否則需要 docker-compose -f [docker-compose.yml 路徑] [命令]:

docker-compose [命令] -help查看某個命令的幫助(神器,授人以魚不如授人以漁)。

docker-compose config驗證 Compose 文件(docker-compose.yml)格式是否正確,若正確則顯示配置。若格式錯誤則顯示原因。

docker-compose up:嘗試自動完成包括構建鏡像,(重新)創建服務,啟動服務,並關聯服務相關容器的一系列操作。

-d 在後臺運行服務容器。
--no-color 不使用顏色來區分不同的服務的控制台輸出。
--no-deps 不啟動服務所鏈接的容器。
--force-recreate 強制重新創建容器,不能與 --no-recreate 同時使用。
--no-recreate 如果容器已經存在了,則不重新創建,不能與 --force-recreate 同時使用。
--no-build 不自動構建缺失的服務鏡像。
-t, --timeout TIMEOUT 停止容器時候的超時(預設為 10 秒)。

docker-compose down:此命令會停止 up 命令所啟動的容器,並移除網路。

docker-compose images :列出 Compose 文件中包含的鏡像。

docker-compose ps:列出項目中目前的所有容器。

docker-compose ps --service:列出項目中目前的所有服務(重要,很多命令都是基於服務來操作的)。

docker-compose logs [options] [SERVICE...]:查看服務容器的日誌輸出。

docker-compose exec [SERVICE] bash : 進入指定的容器。

docker-compose stop [options] [SERVICE...] :停止已經處於運行中的容器,但不刪除它。

docker-compose kill -s SIGINT [SERVICE...] :通過發送 SIGINT 信號來強制停止服務容器(類似於stop)

docker-compose start [SERVICE...] :啟動已經存在的服務容器。

docker-compose restart [options] [SERVICE...]:重啟項目中的服務

docker-compose rm [options] [SERVICE...]:刪除所有(停止狀態的)服務容器,-f 強制刪除,包括非停止狀態 -v 刪除容器所掛載的數據捲。

docker-compose pause [SERVICE...]:暫停一個服務容器。

docker-compose unpause [SERVICE...]:恢復處於暫停狀態中的服務。

docker-compose scale [options] [SERVICE=NUM...]:設置指定服務運行的容器個數。(神器,照這樣豈不是很簡單就實現了分散式?

docker-compose top:查看各個容器內運行的進程

三、Compose 模板文件

    模板文件是使用 Compose 的核心,涉及到的指令關鍵字也比較多。下麵筆主篩選出一些常見的命令,不推薦使用和不常用的就不介紹了~~

    預設的模板文件名稱為 docker-compose.yml,格式為 YAML 格式:

version: '3'
#服務列表
services:
  #服務1,服務名叫web
  web:
    build: .
    ports:
     - "5000:5000"
    command: echo "hello world"
    depends_on:
     - redis
    ulimits:
      #最大進程數
      nproc: 64435
      nofile:
       #文件句柄數為 20000(軟限制,應用可以隨時修改,不能超過硬限制)
       soft: 20000
       #文件句柄數為 40000(系統硬限制,只能 root 用戶提高)
       hard: 40000
  #服務2,服務名叫redis
  redis:
    image: "redis:alpine"

    註意每個服務都必須通過 image 指令指定鏡像或 build 指令(需要 Dockerfile)等來自動構建生成鏡像。

    1、build

指定 Dockerfile 所在文件夾的路徑(可以是絕對路徑,或者相對 docker-compose.yml 文件的路徑)。

version: '3'
services:

  webapp:
    build: ./dir

也可以使用 context 指令指定 Dockerfile 所在文件夾的路徑;使用 dockerfile 指令指定 Dockerfile 文件名;使用 arg 指令指定構建鏡像時的變數。

version: '3'
services:

  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

    2、image

指定為鏡像名稱或鏡像 ID。如果鏡像在本地不存在,Compose 將會嘗試拉取這個鏡像。

version: '3'
services:
  
  redis:
    image: "redis:alpine"

    3、cap_add, cap_drop

指定容器的內核能力(capacity)分配。

#讓容器擁有所有能力可以指定為:
cap_add:
  - ALL
#去掉 NET_ADMIN 能力可以指定為:
cap_drop:
  - NET_ADMIN

    4、command

覆蓋容器啟動後預設執行的命令。

command: echo "hello world"

    5、depends_on

解決容器的依賴、啟動先後的問題。

version: '3'
services:
  
  web:
    build: .
    depends_on:
     - redis
     
  redis:
    image: "redis:alpine"

    6、expose

暴露埠,但不映射到宿主機,只被連接的服務訪問,僅可以指定內部埠為參數。

expose:
 - "3000"
 - "8000"

    7、ports

暴露埠信息;使用宿主埠:容器埠 (HOST:CONTAINER) 格式,或者僅僅指定容器的埠(宿主將會隨機選擇埠)都可以;建議數字串都採用引號包括起來的字元串格式。

ports:
 - "3000"
 - "8000:8000"
 - "49100:22"
 - "127.0.0.1:8001:8001"

    8、ulimits

指定容器的 ulimits 限制值。

ulimits:
  #最大進程數
  nproc: 64435
  nofile:
   #文件句柄數為 20000(軟限制,應用可以隨時修改,不能超過硬限制)
   soft: 20000
   #文件句柄數為 40000(系統硬限制,只能 root 用戶提高)
   hard: 40000

     9、env_file

 從文件中獲取環境變數,可以為單獨的文件路徑或列表;則 env_file 中變數的路徑會基於模板文件路徑。如果有變數名稱與 environment 指令衝突,則按照慣例,以後者為準。

env_file: .env

env_file:
  - ./common.env
  - ./apps/web.env
  - /opt/secrets.env

環境變數文件中每一行必須符合格式,支持 # 開頭的註釋行

# common.env: Set development environment
PROG_ENV=development

    10、environment

設置環境變數。可以使用數組或字典兩種格式;只給定名稱的變數會自動獲取運行 Compose 主機上對應變數的值,可以用來防止泄露不必要的數據。

environment:
  RACK_ENV: development
  SESSION_SECRET:

environment:
  - RACK_ENV=development
  - SESSION_SECRET

    11、extra_hosts

指定額外的 host 名稱映射信息。

extra_hosts:
 - "googledns:8.8.8.8"
 - "dockerhub:52.1.157.61"

    12、labels

為容器添加 Docker 元數據(metadata)信息。例如可以為容器添加輔助說明信息。

labels:
  com.startupteam.description: "webapp for a startup team"
  com.startupteam.department: "devops department"
  com.startupteam.release: "rc3 for v1.0"

    13、sysctls

配置容器內核參數。

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0

sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

    14、volumes

數據捲所掛載路徑設置。可以設置宿主機路徑 (HOST:CONTAINER) 或加上訪問模式 (HOST:CONTAINER:ro);該指令中路徑支持相對路徑。

volumes:
 - /var/lib/mysql
 - cache/:/tmp/cache
 - ~/configs:/etc/configs/:ro

    15、restart

指定容器退出後的重啟策略為始終重啟。該命令對保持服務始終運行十分有效,在生產環境中推薦配置為 always 或者 unless-stopped。

四、寄語

    學習 Docker Compose 過程中,突然想起以前老師的教導:學習一樣技能,心一定要放寬,沒必要鑽牛角尖,畢竟學習不是衝著要成為百科全書而去的,要不然要百科全書幹嘛呢?學習應該是一件很開心快樂的事情,沒必要吹毛求疵,比如說:一個用法有一堆命令可以達到目的,那我都要記下那一堆命令嗎?比如說,一些罕見的用法,我也要過於追究嗎?

 

參考資料:https://yeasy.gitbooks.io/docker_practice/content/compose/


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 升訊威微信營銷系統(微信第三方平臺) 線上體驗:http://wxcm.eeipo.cn/開源地址:https://github.com/iccb1013/Sheng.WeixinConstruction說明:有問題上QQ群交流 QQ群:173459027 作者最初的期望是實現一個微信雲平臺,類似於 ...
  • 廢話不多說,直接上圖看效果,左上角是原圖片大小,右邊是局部放大的效果 主要代碼貼在下麵,picBox是原圖控制項名,picBox_Show是放大控制項名 private void picBox_Paint(object sender, PaintEventArgs e) { if (isMove == ...
  • 這個標題我也不知道咋起,意思說一下你就明白。 1. 對官方控制項的模板進行定製修改,以滿足多樣化需求,還有漂亮的UI 比如ListView,GridView等。 2. 在設計的情況下並沒有這個控制項,而在運行時的時候出現了它 比如微軟的廣告組件,他們叫AdControl,在運行時其實就是一個WebVie ...
  • 分享出來的初衷,我分享一下最近我在小黃豆CRM2.0版本(小黃豆CRM+v2.0.925.3)上加的功能,如果有類似需求的,可以把功能代碼發你,節約你的開發時間。(這是在小黃豆開源免費CRM①群2317681發出的聲音) 小黃豆CRM是一款開源免費的客戶關係管理系統,是為幫助企業快速成長髮展而開發的 ...
  • 1.發佈項目是出現這個錯誤網上找了有兩種方式, 一種是重新安裝VS2015的ClickOnce程式 第二種是修改項目文件的簽名 右擊項目文件的屬性,選擇簽名,然後把紅框內去掉,保存即可。 ...
  • 出錯信息如上所示 解決方案: 首先停止防火牆 然後安裝iptables-services 設置開機啟動防火牆 可以使用下麵命令管理iptables 這時可以保存防火牆規則了 如果你之後要使用firewall的話: 執行命令,即可實現取消服務的鎖定 # systemctl unmask firewal ...
  •     經過前面的學習,tcpdump的用法相信應該都掌握了,今天我們來學習對tcpdump輸出內容的學習和瞭解。我們以第一個示例進行講解如下所示: IP協議包分析 第一行 這裡僅僅是提示如果想獲取和查看更詳細的命令可以嘗試添加的參數。 第二行 tcpdump監聽的網路設備介面和 ...
  • 在執行shell腳本時可以傳遞參數: 腳本獲取參數的格式為:$0 $1 $2 ...其中$1 為傳遞的第一個參數 而$0 接受的是./test.sh 這個東西 代碼:例: 運行結果: 註意:大家可以看到我運行時後面傳了兩個參數 11 22 但是接收時$0接的是 ./test.sh $1 $2接收的才 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...