日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

Docker學習12 使用Compose管理容器集群

 

一、功能說明

容器在當今的云計算中極為重要,是構建微服務的重要組成部分。而一個微服務如果由多個容器,比如Nginx+php+MySQL,單個容器分開管理會非常麻煩 。目前華為云、阿里云等廠商都提供了很多Docker容器的管理工具。Docker Compose 可以輕松、高效的管理容器,它是一個用于定義和運行多容器 Docker 的應用程序工具。

Docker學習12 使用Compose管理容器集群

 

一個使用docker-compose的架構示例

二、安裝

linux下的安裝命令:

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose -v

mac環境在使用安裝文件安裝Docker時會自帶Compose

三、常用命令

# 列出所有容器
docker-compose ps
# 看服務日志
docker-compose logs
# 打印綁定的公共端口,下面是個示例
docker-compose port eureka 8761
# 構建服務
docker-compose build
# 啟動指定服務已存在的容器
docker-compose start eureka
# 停止已運行的服務的容器
docker-compose stop eureka
# 刪除指定服務的容器
docker-compose rm eureka
# 構建啟動容器,更新容器
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

四、使用步驟

  1. 使用 Dockerfile 定義應用程序的環境。
  2. 使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
  3. docker-compose up 啟動。

五、測試步驟

1. 準備文件

mkdir composetest
cd composetest
vim App.py
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)


def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)


@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.n'.format(count)

這個示例Python去訪問redis服務,端口6379。

在 composetest 目錄中創建另一個名為 requirements.txt 的文件,內容如下:

flask
redis

2. 編輯vim Dockerfile文件

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

這個Dockerfile是構建Python容器使用。字段解釋如下:

  • FROM python:3.7-alpine: 從 Python 3.7 映像開始構建鏡像。
  • WORKDIR /code: 將工作目錄設置為 /code。
  • ENV FLASK_APP app.py flask主文件設置
  • ENV FLASK_RUN_HOST 0.0.0.0 設置 flask 命令使用的環境變量。
  • RUN apk add --no-cache gcc musl-dev linux-headers: 安裝 gcc,以便諸如 MarkupSafe 和 SQLAlchemy 之類的 Python 包可以編譯加速。
  • COPY requirements.txt requirements.txt
  • RUN pip install -r requirements.txt 復制 requirements.txt 并安裝 Python 依賴項。
  • COPY . .: 將 . 項目中的當前目錄復制到 . 鏡像中的工作目錄。
  • CMD ["flask", "run"]: 容器提供默認的執行命令為:flask run。

3. 創建 docker-compose.yml

在測試目錄中創建一個名為 docker-compose.yml 的文件:

# yaml 配置
version: '3'
services:
  web:
    build: .
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"

該 Compose 文件定義了兩個服務:web 和 redis。

  • version: 指定 docker-compose.yml 文件的寫法格式
  • services: 多個容器的集合
  • web:該 web 服務使用從 Dockerfile 當前目錄中構建的鏡像。然后,它將容器和主機綁定到暴露的端口 5000。此示例服務使用 Flask Web 服務器的默認端口 5000 。
  • redis:該 redis 服務使用 Docker Hub 的公共 Redis 映像。
  • links: 服務之間可以使用服務名稱相互訪問,links 允許定義一個別名,從而使用該別名訪問其它服務,如:
version: '2'
services:
    web:
        build: .
        links:
            - "db:database"
    db:
        image: postgres

Web 服務就可以使用 db 或 database 作為 hostname 訪問 db 服務了。

4. 使用 Compose 命令構建和運行應用

在測試目錄中,執行以下命令來啟動應用程序:

docker-compose up

后臺執行該服務可以加上 -d 參數:

docker-compose up -d

運行效果:

Docker學習12 使用Compose管理容器集群

 

六、yml 配置指令參考

version

指定本 yml 依從的 compose 哪個版本制定的。

build

指定為構建鏡像上下文路徑:例如 webapp 服務,指定為從上下文路徑 ./dir/Dockerfile 所構建的鏡像:

version: "3.7"
services:
  webapp:
    build: ./dir

或者,作為具有在上下文指定的路徑的對象,以及可選的 Dockerfile 和 args:

version: "3.7"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1
      labels:
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
      target: prod
  • context:上下文路徑。
  • dockerfile:指定構建鏡像的 Dockerfile 文件名。
  • args:添加構建參數,這是只能在構建過程中訪問的環境變量。
  • labels:設置構建鏡像的標簽
  • target:多層構建,可以指定構建哪一層。

cap_add,cap_drop

添加或刪除容器擁有的宿主機的內核功能。

cap_add:
  - ALL # 開啟全部權限

cap_drop:
  - SYS_PTRACE # 關閉 ptrace權限

cgroup_parent

為容器指定父 cgroup 組,意味著將繼承該組的資源限制。

cgroup_parent: m-executor-abcd

command

覆蓋容器啟動的默認命令。

command: ["bundle", "exec", "thin", "-p", "3000"]

container_name

指定自定義容器名稱,而不是生成的默認名稱。

depends_on

設置依賴關系。

deploy

指定與服務的部署和運行有關的配置。只在 swarm 模式下才會有用。

endpoint_mode:

訪問集群服務的方式。

devices

指定設備映射列表。

DNS

自定義 DNS 服務器,可以是單個值或列表的多個值。

dns_search

自定義 DNS 搜索域。可以是單個值或列表。

entrypoint

覆蓋容器默認的 entrypoint。

env_file

從文件添加環境變量。可以是單個值或列表的多個值。

environment

添加環境變量。您可以使用數組或字典、任何布爾值,布爾值需要用引號引起來,以確保 YML 解析器不會將其轉換為 True 或 False。

expose

暴露端口,但不映射到宿主機,只被連接的服務訪問。

extra_hosts

添加主機名映射。類似 docker client --add-host。

healthcheck

用于檢測 docker 服務是否健康運行。

image

指定容器運行的鏡像。

logging

服務的日志記錄配置。

network_mode

設置網絡模式。

restart

重啟策略

secrets

存儲敏感數據

security_opt

修改容器默認的 schema 標簽。

stop_grace_period

指定在容器無法處理 SIGTERM (或者任何 stop_signal 的信號),等待多久后發送 SIGKILL 信號關閉容器。

stop_signal

設置停止容器的替代信號。

sysctls

設置容器中的內核參數,可以使用數組或字典格式。

tmpfs

在容器內安裝一個臨時文件系統。可以是單個值或列表的多個值。

ulimits

覆蓋容器默認的 ulimit。

volumes

將主機的數據卷或著文件掛載到容器里。

分享到:
標簽:Docker Compose
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定