Docker:Docker Compose 詳解

duanhao發表於2021-09-09

Docker Compose 概述與安裝?

  • 前面我們使用 Docker 的時候,定義 Dockerfile 檔案,然後使用 docker build、docker run 等命令操作容器。然而微服務架構的應用系統一般包含若干個微服務,每個微服務一般都會部署多個例項,如果每個微服務都要手動啟停,那麼效率之低,維護量之大可想而知

  • 使用 Docker Compose 可以輕鬆、高效的管理容器,它是一個用於定義和執行多容器 Docker 的應用程式工具

安裝 Docker Compose

  • 安裝 Docker Compose 可以透過下面命令自動下載適應版本的 Compose,併為安裝指令碼新增執行許可權

curl -L `uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
  • 檢視安裝是否成功

docker-compose -v

快速入門

  • 打包專案,獲得 jar 包 docker-demo-0.0.1-SNAPSHOT.jar

mvn clean package
  • 在 jar 包所在路徑建立 Dockerfile 檔案,新增以下內容

FROM java:8
VOLUME /tmp
ADD docker-demo-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
  • 在 jar 包所在路徑建立檔案 docker-compose.yml,新增以下內容

version: '2' # 表示該 Docker-Compose 檔案使用的是 Version 2 fileservices:
  docker-demo:  # 指定服務名稱
    build: .  # 指定 Dockerfile 所在路徑
    ports:    # 指定埠對映
      - "9000:8761"
  • 在 docker-compose.yml 所在路徑下執行該命令 Compose 就會自動構建映象並使用映象啟動容器

docker-compose up
docker-compose up -d  // 後臺啟動並執行容器
  • 訪問 即可訪問微服務介面

工程、服務、容器

  • Docker Compose 將所管理的容器分為三層,分別是工程(project)、服務(service)、容器(container)

  • Docker Compose 執行目錄下的所有檔案(docker-compose.yml)組成一個工程,一個工程包含多個服務,每個服務中定義了容器執行的映象、引數、依賴,一個服務可包括多個容器例項

Docker Compose 常用命令與配置

常見命令

  • ps:列出所有執行容器

docker-compose ps
  • logs:檢視服務日誌輸出

docker-compose logs
  • port:列印繫結的公共埠,下面命令可以輸出 eureka 服務 8761 埠所繫結的公共埠

docker-compose port eureka 8761
  • build:構建或者重新構建服務

docker-compose build
  • start:啟動指定服務已存在的容器

docker-compose start eureka
  • stop:停止已執行的服務的容器

docker-compose stop eureka
  • rm:刪除指定服務的容器

docker-compose rm eureka
  • up:構建、啟動容器

docker-compose up
  • kill:透過傳送 SIGKILL 訊號來停止指定服務的容器

docker-compose kill eureka
  • pull:下載服務映象

  • scale:設定指定服務運氣容器的個數,以 service=num 形式指定

docker-compose scale user=3 movie=3
  • run:在一個服務上執行一個命令

docker-compose run web bash

docker-compose.yml 屬性

  • version:指定 docker-compose.yml 檔案的寫法格式

  • services:多個容器集合

  • build:配置構建時,Compose 會利用它自動構建映象,該值可以是一個路徑,也可以是一個物件,用於指定 Dockerfile 引數

build: ./dir
---------------
build:
    context: ./dir
    dockerfile: Dockerfile
    args:
        buildno: 1
  • command:覆蓋容器啟動後預設執行的命令

command: bundle exec thin -p 3000
----------------------------------command: [bundle,exec,thin,-p,3000]
  • dns:配置 dns 伺服器,可以是一個值或列表

dns: 8.8.8.8------------dns:    - 8.8.8.8
    - 9.9.9.9
  • dns_search:配置 DNS 搜尋域,可以是一個值或列表

dns_search: example.com------------------------dns_search:    - dc1.example.com
    - dc2.example.com
  • environment:環境變數配置,可以用陣列或字典兩種方式

environment:
    RACK_ENV: development
    SHOW: 'ture'-------------------------
environment:
    - RACK_ENV=development
    - SHOW=ture
  • env_file:從檔案中獲取環境變數,可以指定一個檔案路徑或路徑列表,其優先順序低於 environment 指定的環境變數

env_file: .env
---------------
env_file:
    - ./common.env
  • expose:暴露埠,只將埠暴露給連線的服務,而不暴露給主機

expose:
    - "3000"
    - "8000"
  • image:指定服務所使用的映象

image: java
  • network_mode:設定網路模式

network_mode: "bridge"network_mode: "host"network_mode: "none"network_mode: "service:[service name]"network_mode: "container:[container name/id]"
  • ports:對外暴露的埠定義,和 expose 對應

ports:   # 暴露埠資訊  - "宿主機埠:容器暴露埠"- "8763:8763"- "8763:8763"
  • links:將指定容器連線到當前連線,可以設定別名,避免ip方式導致的容器重啟動態改變的無法連線情況

links:    # 指定服務名稱:別名 
    - docker-compose-eureka-server:compose-eureka
  • volumes:卷掛載路徑

volumes:
  - /lib
  - /var
  • logs:日誌輸出資訊

--no-color          單色輸出,不顯示其他顏.
-f, --follow        跟蹤日誌輸出,就是可以實時檢視日誌
-t, --timestamps    顯示時間戳
--tail              從日誌的結尾顯示,--tail=200

Docker Compose 其它

更新容器

  • 當服務的配置發生更改時,可使用 docker-compose up 命令更新配置

  • 此時,Compose 會刪除舊容器並建立新容器,新容器會以不同的 IP 地址加入網路,名稱保持不變,任何指向舊容起的連線都會被關閉,重新找到新容器並連線上去

links

  • 服務之間可以使用服務名稱相互訪問,links 允許定義一個別名,從而使用該別名訪問其它服務

version: '2'services:
    web:
        build: .
        links:
            - "db:database"
    db:
        image: postgres
  • 這樣 Web 服務就可以使用 db 或 database 作為 hostname 訪問 db 服務了



作者:林塬
連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1343/viewspace-2809596/,如需轉載,請註明出處,否則將追究法律責任。

相關文章