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/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), 欢迎大家关注哦~~
Docker入门(三)使用Docker Compose的更多相关文章
- SpringBoot Docker入门,SpringBoot Docker安装
SpringBoot Docker入门,SpringBoot Docker安装 ================================ ©Copyright 蕃薯耀 2018年4月8日 ht ...
- Docker(三):Docker入门教程-CentOS Docker 安装
CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发 ...
- docker入门 基础命令 docker安装
docker入门 在学一门新知识的时候,超哥喜欢提问,why?what?how? wiki资料 什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes ...
- 【docker 入门 - 01】- Docker 在 Centos7 上安装与测试
一.学习文档 官网网站: https://www.docker.com 中文网站:http://www.docker-cn.com 官方安装文档:https://docs.docker.com/ins ...
- Docker(三)Docker是如何工作的
摘自 https://mp.weixin.qq.com/s/SsXIuDqeze_et8vWQ8fr3g 一.Docker Client 也称为Docker客户端.其实就是Docker提供命令行界面工 ...
- docker(三)docker镜像和镜像发布方法
一.从公网docker hub 拉取image ~ # 搜索docker search centos~ » docker pull centos admin@steven- Using default ...
- Docker入门之安装Docker
目录 目录 1 1. 前言 1 2. 创建网桥 2 3. 安装Docker 2 3.1. 二进制安装 3 3.1.1. 下载安装 3 3.1.2. 配置服务 3 3.1.3. 启动服务 4 3.2. ...
- Docker入门 - 001 CentOS Docker 安装
Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. ...
- docker入门 什么是docker? 为什么使用docker?
1.什么是docker? 轻量级操作系统虚拟化解决方案 2.为什么使用docker? 1.docker的启动是秒级的,比传统虚拟机快很多 2.资源利用率高,一台主机上可同时运行数千个docker容器 ...
- Docker 入门及安装[Docker 系列-1]
docker 如日中天,这不是单纯的炒概念,docker 确确实实解决了开发与运维的痛点,因此在企业开发中得到了非常广泛的使用,本文对于 docker 的这些基本知识点再做一些简单回顾. 什么是 do ...
随机推荐
- Java多线程:线程间通信之Lock
Java 5 之后,Java在内置关键字sychronized的基础上又增加了一个新的处理锁的方式,Lock类. 由于在Java线程间通信:volatile与sychronized中,我们已经详细的了 ...
- 并查集(union-find set)与Kruskal算法
并查集 并查集处理的是集合之间的关系,即‘union' , 'find' .在这种数据类型中,N个不同元素被分成若干个组,每组是一个集合,这种集合叫做分离集合.并查集支持查找一个元素所属的集合和两个元 ...
- Qt中绘制五子棋棋盘
一个需要做大作业的同学问我相关内容,就顺手写了一个,贴出来. 项目包含头文件 mainwindowh,源文件mainwindow.cpp和主函数main.cpp. 如下: mainwindow.h # ...
- THINKPHP 调试------输出sql语句
echo $model->getLastSql();//$model为实例化的模板类
- scrapy安装过程问题解决、新建项目、调试断点
一.安装问题 1. 下载速度太慢 使用国外源,下载速度很慢,可以考虑使用豆瓣的镜像下载 pip install -i https://pypi.douban.com/simple/ scrapy 2. ...
- 智能指针之 shared_ptr
std::shared_ptr 是通过指针保持对象共享所有权的智能指针.多个 shared_ptr 对象可占有同一对象大概实现了一下,主要实现原理为,共享指针内部持有堆资源 的指针以及引用计数的指针 ...
- pycharm中from xx import xx报错:Unresolved reference
出现问题:无法引用到相关的类,但是这些类确实都在工程中 分析原因:import不成功是路径没对应上,pycharm默认该项目的根目录为source目录 解决方案: 将对应的项目searchTest,选 ...
- js基础--javaScript数据类型你都弄明白了吗?绝对干货
欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...
- 写完批处理脚本,再写个Gradle脚本,解放双手
前言 上一篇写个批处理来帮忙干活---遍历&字符串处理中,我们已经学习如何写批处理脚本来帮我们做一些简单的重复性工作,本篇继续来学习如何用 Gradle 写脚本,让它也来帮我们干活 Gradl ...
- jQuery学习之旅 Item7 区别this和$(this)
刚开始以为this和$(this)就是一模子刻出来.但是我在阅读时,和coding时发现,总不是一回事,这里就谈谈this与$(this)的区别. 1.jQuery中this与$(this)的区别 $ ...