1、docker-compose簡介
Compose 是用於定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然后,使用一個命令,就可以從 YML 文件配置中創建並啟動所有服務。
2、安裝
Linux
Linux 上我們可以從 Github 上下載它的二進制包來使用,最新發行的版本地址:https://github.com/docker/compose/releases。
運行以下命令以下載 Docker Compose 的當前穩定版本:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
要安裝其他版本的 Compose,請替換 1.24.1。
將可執行權限應用於二進制文件:
$ sudo chmod +x /usr/local/bin/docker-compose
創建軟鏈:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
測試是否安裝成功:
$ docker-compose --version cker-compose version 1.24.1, build 4667896b
注意: 對於 alpine,需要以下依賴包: py-pip,python-dev,libffi-dev,openssl-dev,gcc,libc-dev,和 make。
macOS
Mac 的 Docker 桌面版和 Docker Toolbox 已經包括 Compose 和其他 Docker 應用程序,因此 Mac 用戶不需要單獨安裝 Compose。
windows PC
Windows 的 Docker 桌面版和 Docker Toolbox 已經包括 Compose 和其他 Docker 應用程序,因此 Windows 用戶不需要單獨安裝 Compose。
3、准備
使用Compose基本上需要三個步驟:
-
用Dockerfile定義應用程序的環境,以便可以在任何地方復制。
-
在docker-compose.yml中定義組成應用程序的服務,所以它們可以在一個孤立的環境中運行 -
運行
docker-compose up和Compose啟動並運行整個應用程序。
docker-compose.yml 標准格式:
version: "3.8"
services:
web: #運行的服務1:web
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links: #與哪個容器進行相連
- redis
redis: #運行的服務2:redis
image: redis
volumes:
logvolume01: {}
(每一行空兩格)
4、使用和運行
1、准備
創建一個測試目錄:
$ mkdir composetest $ cd composetest
在測試目錄中創建一個名為 app.py 的文件,並復制粘貼以下內容:
composetest/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)
在此示例中,redis 是應用程序網絡上的 redis 容器的主機名,該主機使用的端口為 6379。
在 composetest 目錄中創建另一個名為 requirements.txt 的文件,內容如下:
flask redis
2、創建 Dockerfile 文件
在 composetest 目錄中,創建一個名為的文件 Dockerfile,內容如下:
FROM python:3.7-alpine #從 Python 3.7 映像開始構建鏡像。 WORKDIR /code #將工作目錄設置為 /code。 ENV FLASK_APP app.py 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 的文件,然后粘貼以下內容:
docker-compose.yml 配置文件
# yaml 配置
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
該 Compose 文件定義了兩個服務:web 和 redis。
- web:該 web 服務使用從 Dockerfile 當前目錄中構建的鏡像。然后,它將容器和主機綁定到暴露的端口 5000。此示例服務使用 Flask Web 服務器的默認端口 5000 。
- redis:該 redis 服務使用 Docker Hub 的公共 Redis 映像。
4、使用 Compose 命令構建和運行您的應用
在測試目錄中,執行以下命令來啟動應用程序:
docker-compose up
如果想在后台執行該服務可以加上 -d 參數:
docker-compose up -d
