歡迎關注【無量測試之道】公衆號,回覆【領取資源】,
Python編程學習資源乾貨、
Python+Appium框架APP的UI自動化、
Python+Selenium框架Web的UI自動化、
Python+Unittest框架API自動化、
資源和代碼 免費送啦~
文章下方有公衆號二維碼,可直接微信掃一掃關注即可。
1、什麼是 docker-compose?
Compose 是用於定義和運行多容器 Docker 應用程序的工具。通過 Compose,您可以使用 YML 文件來配置應用程序需要的所有服務。然後,使用一個命令,就可以從 YML 文件配置中創建並啓動所有服務。
2、Compose 使用的三個步驟
1.使用 dockerfile 定義應用程序的環境。
2.使用 docker-compose.yml 定義構成應用程序的服務,這樣它們可以在隔離環境中一起運行。
3.執行 docker-compose build/up 命令來啓動並運行整個應用程序。
3、目錄組織結構
這個非常重要,因爲它是有規範的,如下截圖所示:
4、dockerfile 及yml 文件詳細內容展示
實戰項目示例
docker-compose.yml文件具體內容如下:
#docker-compose的版本
version: '2'
#定義服務
services:
#服務名稱,可隨意定義
httprunner:
build:
#dockerfile的路徑
context: httprunner
#dockerfile的名稱
dockerfile: Dockerfile
#相當於docker run -v的作用
volumes:
- "./httprunner:/httprunner"
#httprunner容器名稱
container_name: HttpRunner-django-backend-compose
#該服務依賴的其他服務,該配置選項可修改啓動順序
depends_on:
- mysql
- rabbitmq
ports:
- "8000:8000"
#服務名稱,可隨意定義
mysql:
build:
#dockerfile的路徑
context: mysql
#dockerfile的名稱
dockerfile: Dockerfile
ports:
- "3306:3306"
#相當於docker run命令中的-e
environment:
MYSQL_ROOT_PASSWORD: 123456
#初始化的數據庫名稱
MYSQL_DATABASE: HttpRunner
#mysql容器名稱
container_name: HttpRunner-mysql-compose
restart: always
#數據卷映射關係,把本機的./mysql/db目錄映射到容器中的/var/lib/mysql
volumes:
- "./mysql/data/:/var/lib/mysql"
#該選項中的命令會覆蓋Dockfile中的CMD中的命令.lower_case_table_names參數是爲了表名不區分大小寫,default-authentication-plugin是8.0中密碼加密策略不同帶來的鏈接問題,如果不用8.0可不加此選項
command: mysqld --lower_case_table_names=1 --default-authentication-plugin=mysql_native_password
#服務名稱,可隨意定義
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
container_name: HttpRunner-rabbitmq-compose
environment:
#rabbitmq的初始用戶名
RABBITMQ_DEFAULT_USER: admin
#rabbitmq的初始密碼
RABBITMQ_DEFAULT_PASS: 123456
#指定使用的網絡,此處是使用已經提前創建好的自定義網絡
#網絡創建命令:docker network create -d bridge --subnet 172.50.0.0/16 cooperationassociation --subnet指定網段 -d指定連接方式,最後的cooperationassociation爲網絡名稱
#使用新的指定網絡是爲了防止網段佔用完,這樣會導致啓動容器時XShell會自動退出,且本地用不了訪問不了服務(服務器已有大量連接時可能會出現),查看網段佔用情況的命令:route -n
networks:
default:
external:
name: cooperationassociation
httprunner 目錄下的dockerfile :
FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /httprunner
WORKDIR /httprunner
ADD requirements.txt /httprunner/
RUN pip install -r requirements.txt
ADD run.sh /httprunner/
CMD sh run.sh
mysql 目錄下的dockerfile:
FROM mysql:5.7
ADD createdb.sql /docker-entrypoint-initdb.d
rabbitmq 目錄下的dockerfile是空的,因爲它的鏡像直接在docker-compose.yml裏面定義了,如下所示:
#服務名稱,可隨意定義
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
container_name: HttpRunner-rabbitmq-compose
environment:
#rabbitmq的初始用戶名
RABBITMQ_DEFAULT_USER: admin
#rabbitmq的初始密碼
RABBITMQ_DEFAULT_PASS: 123456
5、構建操作
在docker-compose.yml 同目錄下執行命令docker-compose build 即可
構建的結果:
說明:rabbitmq 這個鏡像之前docker pull 過,本次又沒有變化,所以沒有做更新。
備註:我的個人公衆號已正式開通,致力於測試技術的分享,包含:大數據測試、功能測試,測試開發,API接口自動化、測試運維、UI自動化測試等,微信搜索公衆號:“無量測試之道”,或掃描下方二維碼:
添加關注,一起共同成長吧。