Docker入门(三)使用Docker Compose

6次阅读

共计 3631 个字符,预计需要花费 10 分钟才能阅读完成。

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 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/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),欢迎大家关注哦~~

正文完
 0