Docker-Compose實戰「上篇」

歡迎關注【無量測試之道】公衆號,回覆【領取資源】,
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自動化測試等,微信搜索公衆號:“無量測試之道”,或掃描下方二維碼:

 添加關注,一起共同成長吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章