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/Poem-Search/tree/v1.2 。
首先我們先打包一個poem_search鏡像,用於前端運行,然后拉取鏡像mongo,最后用Compose將兩個鏡像打包在一起,共同運行。
打包poem_search鏡像涉及到兩個文件:poem_search.build及build_poem_search.sh 。其中Dockerfile文件poem_search.build如下:
FROM centos:7.5.1804
# 維護者
MAINTAINER jclian91@sina.com
# 安裝基礎環境
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/wutengfei/2156792 。
切換至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/Poem-Search.git, 分支為v1.2 。
注意:本人現已開通微信公眾號: Python爬蟲與算法(微信號為:easy_web_scrape), 歡迎大家關注哦~~