需要事先安裝docker
CentOS 7.9 安裝Docker
Docker-compose 簡介
Docker-compose 是用于定義和運作多容器 Docker 應用程式的工具。通過 Compose,您可以使用 YML 檔案來配置應用程式需要的所有服務。然後,使用一個指令,就可以從 YML 檔案配置中建立并啟動所有服務。
docker-compose 通過一個 yml 模闆檔案來統一管理多個容器的配置,如網絡、資料卷、執行指令、環境變量、資源限制等等。有了 docker-compose 我們便可以一鍵重新開機、關閉、删除、監控所有的 docker 服務,隻需要一次配置,則可以對容器進行統一管理,那麼此時我們則不必為了每次要運作一堆容器時寫大量的指令而頭疼。
安裝docker-compose
1.從github上下載下傳docker-compose二進制檔案安裝
下載下傳最新版的docker-compose檔案
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
若是github通路太慢,可以用daocloud下載下傳
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
添加可執行權限
sudo chmod +x /usr/local/bin/docker-compose
測試是否安裝成功:
docker-compose --version
如下圖所示,安裝成功
如果docker-compose安裝後指令失敗,請檢查您的路徑。您還可以/usr/bin在路徑中建立指向或任何其他目錄的符号連結。
符号連結類似于Windows的快捷方式,快捷方式存儲了指向那個檔案的絕對路徑
符号連結是一個指針,指向檔案在檔案系統中的位置。符号連結可以跨檔案系統,甚至可以指向遠端檔案系統中的檔案。符号連結隻是指明了原始檔案的位置,使用者需要對原始檔案的位置有通路權限才可以使用連結。如果原始檔案被删除,所有指向它的符号連結也就都被破壞了。它們會指向檔案系統中并不存在的一個位置(删除連結并不會删除原檔案,删除源檔案會删除連結)。
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
檢視環境變量
echo $PATH
可以看見是有usr/local/bin 路徑的,是以能找到docker-compose
Compose 使用的三個步驟:
- 使用 Dockerfile 定義應用程式的環境。
- 使用 docker-compose.yml 定義構成應用程式的服務,這樣它們可以在隔離環境中一起運作。
- 最後,執行 docker-compose up 指令來啟動并運作整個應用程式。
Compose 具有用于管理應用程式整個生命周期的指令:
- 啟動、停止和重建服務
- 檢視正在運作的服務的狀态
- 流式傳輸正在運作的服務的日志輸出
- 對服務運作一次性指令
Docker Compose 官方例子:
建構一個在 Docker Compose 上運作的簡單 Python Web 應用程式。該應用程式使用 Flask 架構并在 Redis 中維護一個計數器。
第 1 步:設定
定義應用程式依賴項。
1.為項目建立一個目錄:
mkdir composetest
cd composetest
2.建立app.py檔案,複制如下代碼到這個app.py檔案中(因為linux中不太好操作,我直接在本地寫好,然後使用xftp軟體上傳到指定檔案夾composetest下面,後面的檔案也是一樣,全部在電腦本地寫完之後,使用xftp軟體上傳到伺服器composetest檔案夾下面)
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 容器主機名。使用 Redis 的預設端口,6379.
3.在composetest檔案夾下再建立requirements.txt 檔案,複制以下内容放入這個檔案中
flask
redis
第 2 步:建立一個 Dockerfile
在此步驟中,您将編寫一個用于建構 Docker image的 Dockerfile。該image包含 Python 應用程式所需的所有依賴項,包括 Python 本身。
在您的項目目錄composetest中,建立一個Dockerfile檔案,并粘貼以下内容:
# syntax=docker/dockerfile:1
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
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
這告訴 Docker:
- 從 Python 3.7 鏡像開始建構鏡像。
- 将工作目錄設定為/code
- 設定flask指令使用的環境變量。
- 安裝 gcc 和其他依賴項
- 複制requirements.txt并安裝 Python 依賴項。
- 将中繼資料添加到image以描述容器正在監聽端口 5000
- 将項目中的目前目錄. 複制到鏡像中的workdir.
- 将容器的預設指令設定為flask run.
第 3 步:在 Compose 檔案中定義服務
在項目目錄中建立一個名為docker-compose.yml的檔案并粘貼以下内容:
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
這個 Compose 檔案定義了兩個服務:web和redis.
web服務
該web服務使用的是從目前目錄Dockerfile中建構的鏡像。然後它将容器的5000端口綁定到主機端口5000. 此示例服務使用 Flask Web 伺服器的預設端口5000.
Redis服務
該redis服務使用 從 Docker Hub 系統資料庫中提取的公共Redis映像。
上傳檔案到伺服器composetest檔案夾下
上傳失敗,說明伺服器的這個檔案夾權限不夠,授予讀寫可執行權限7
777就是rwxrwxrwx,意思是該登入使用者(可以用指令id檢視)、他所在的組和其他人都有最高權限
chmod 777 composetest
再次拖拽成功
第 4 步:使用 Compose 建構并運作您的應用程式
1.從您的項目目錄,通過運作docker-compose up啟動您的應用程式。
docker-compose up
2.在浏覽器中輸入 http://伺服器IP:5000/ 以檢視運作的應用程式。
不要忘記開放伺服器防火牆的5000端口
運作成功
3.重新整理頁面,次數遞增
4.切換到另一個終端視窗,然後鍵入docker image ls以列出本地image。
docker image ls
您可以使用docker inspect .來檢視容器/鏡像的中繼資料
docker inspect composetest_web
5.停止應用程式,方法是docker-compose down 在第二個終端的項目目錄中(composetest)運作,或者在啟動應用程式的原始終端中按 CTRL+C。
docker-compose down
第 5 步:編輯 Compose 檔案(docker-compose.yml)以添加綁定挂載
version: "3.9"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
environment:
FLASK_ENV: development
redis:
image: "redis:alpine"
volumes将主機上的項目目錄(目前目錄)挂載到容器内部的/code檔案夾,允許您即時修改代碼,而無需重新建構鏡像。該environment鍵設定 FLASK_ENV環境變量,它告訴flask run在開發模式下運作,并重新加載更改代碼。這種模式應該隻在開發中使用。
第 6 步:使用 Compose 重新建構并運作應用程式
從您的項目目錄中,鍵入docker-compose up以使用更新的docker-compose.yml 檔案建構應用程式,然後運作它。
docker-compose up
第 7 步:更新應用程式
由于應用程式代碼現在使用volumes挂載到容器中,是以您可以對其代碼進行更改并立即檢視更改,而無需重新建構鏡像。
更改應用程式app.py并儲存。例如,将Hello World! 消息更改為Hello from xt !!!:
重新整理網頁,即時生效
第 8 步:嘗試一些其他指令
首先按Ctrl + C 停止目前運作
然後加上 -d 讓服務在背景運作
docker-compose up -d
檢視目前運作的服務
docker-compose ps
該docker-compose run指令允許您為您的服務運作一次性指令。例如,要檢視web服務可用的環境變量 :
docker-compose run web env
如果您使用docker-compose up -d在背景啟動了服務 ,你可以停止服務:
docker-compose stop
想檢視docker-compose的其他指令,使用如下指令
docker-compose --help
References:
- https://www.runoob.com/docker/docker-compose.html
- https://www.jianshu.com/p/5ba9f9159696
- https://docs.docker.com/compose/gettingstarted/