Docker入門(三)使用Docker Compose
Compose介紹
Compose 專案是 Docker 官方的開源專案,負責實現對 Docker 容器叢集的快速編排。Compose 是一個使用者定義和執行多個容器的 Docker 應用程式。在 Compose 中你可以使用 YAML 檔案來配置你的應用服務。然後,只需要一個簡單的命令,就可以建立並啟動你配置的所有服務。
為什麼使用Compose
在Docker映象構成和定製介紹中,我們可以使用Dockerfile檔案很方便定義一個單獨的應用容器。然而,在日常工作中,經常會碰到需要多個容器相互配合來完成某項任務的情況。例如要實現一個 Web 專案,除了 Web 服務容器本身,往往還需要再加上後端的資料庫服務容器,甚至還包括負載均衡容器等。Compose 恰好滿足了這樣的需求。它允許使用者通過一個單獨的 docker-compose.yml 模板檔案(YAML 格式)來定義一組相關聯的應用容器為一個專案(project)。
安裝Compose
Compose的安裝十分容易,只需要以下命令即可:
pip install docker-compose
為了檢測Compose是否安裝成功,可以檢視Compose的版本資訊,如下:
$ docker-compose -version docker-compose version 1.23.2, build 1110ad0
Compose實戰
接下去我們將通過一個具體的專案來展示Compose的使用。專案的結構如下:
對於專案的Python程式碼,我們不再具體講述,有興趣的同學可移步: https://github.com/percent4/P... 。
首先我們先打包一個poem_search映象,用於前端執行,然後拉取映象mongo,最後用Compose將兩個映象打包在一起,共同執行。
打包poem_search映象涉及到兩個檔案:poem_search.build及build_poem_search.sh 。其中Dockerfile檔案poem_search.build如下:
FROM centos:7.5.1804 # 維護者 MAINTAINER [email protected] # 安裝基礎環境 RUN yum clean all \ && yum makecache \ && yum update -y \ && yum groupinstall -y "Development tools" \ && yum install -y yum-utils \ && yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel \ && yum install -y sqlite-devel readline-devel tk-devel gdbm-devel \ && yum install -y db4-devel libpcap-devel xz-devel \ && yum install -y wget gcc gcc-c++ automake autoconf libtool make \ && yum install -y wget gcc gcc-c++ python-devel mysql-devel bzip2 \ && yum install -y https://centos7.iuscommunity.org/ius-release.rpm \ && yum install -y python36u \ && yum install -y python36u-pip \ && yum install -y python36u-devel \ && yum clean all # 安裝Python3.6 RUN cd /usr/bin \ && mv python python_old \ && ln -s /usr/bin/python3.6 /usr/bin/python \ && ln -s /usr/bin/pip3.6 /usr/bin/pip \ && pip install --upgrade pip #環境變數硬編碼及時區 ENV ENVIRONMENT production RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #安裝Python的第三方模組 RUN pip3 install pandas -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ && pip3 install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ && pip3 install tornado -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ && pip3 install urllib3 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ && pip3 install requests -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \ && pip3 install bs4 # 拷貝 COPY ./src /root/poem_search/src # 工作目錄 WORKDIR /root/poem_search/src # 暴露埠 EXPOSE 8000 # 執行命令 CMD ["python","server.py"]
shell指令碼build_poem_search.sh的程式碼如下:
tag=$1 # -f 指定檔案 , -t 指定生成映象名稱 , 冒號後為版本號,最後的.表示docker_file的上下文環境 docker build -f poem_search.build -t hub.docker.com/poem_search:test.${tag} .
打包映象,並將該映象推送至自己的docker hub,命令如下:
./build_poem_search.sh 1111
映象打包完後,將其推送至自己的docker hub,具體的命令可以參考文章: Docker入門(一)用hello world入門docker , 如下圖:
接著,拉取MongoDB映象:
docker pull mongo
最後,用docker compose將兩個映象組合在一起,其中docker-compose.yml如下:
version: "3.3" # 定義兩個服務: poemSearch, mongo services: poemSearch: depends_on: - mongo image: jclian91/poem_search:v1.0_2019.02.20.1745 container_name: poemSearch ports: - "8000:8000" restart: always deploy: replicas: 1 networks: - poemSearch mongo: image: mongo:latest container_name: mongo deploy: replicas: 1 networks: - poemSearch ports: - "27017:27017" volumes: - $PWD/db:/data/db command: ["mongod"] #Network networks: poemSearch:
關於YAML檔案的編寫及說明,可以參考網址: http://blog.51cto.com/wutengf... 。
切換至YAML所在資料夾,輸入命令:
docker-compose up -d
輸出的結果如下:
Creating mongo ... done Creating poemSearch ... done
這時,在瀏覽器中輸入“ http://localhost :8000/query”即可執行我們的程式,介面如下:
在其中輸入搜尋關鍵詞,比如“白雲”,則會顯示一條隨機的結果,如下:
點選“查詢詞高亮”,則查詢詞部分會高亮顯示。
體驗Compose
如果需要體驗該專案,則需要以下三個工具:
- git
- docker
- docker-compose
用git下載該專案,命令如下:
git init git clone -b v1.2 https://github.com/percent4/Poem-Search.git
然後切換至docker-compose.yml所在路徑,執行命令:
docker-compose up -d
即可執行該專案,然後在瀏覽器中輸入“ http://localhost :8000/query”即可。如需要停止該專案的執行,則執行命令:
docker-compose down
總結
本專案的github地址為 https://github.com/percent4/P... , 分支為v1.2 。
注意:本人現已開通微信公眾號: Python爬蟲與演算法(微訊號為:easy_web_scrape), 歡迎大家關注哦~~