前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >容器组织服务docker-compose

容器组织服务docker-compose

作者头像
SRE运维实践
发布2019-07-08 12:17:58
9360
发布2019-07-08 12:17:58
举报
文章被收录于专栏:SRE运维实践

序言

在使用容器的时候,我们总是要运行很多的容器,才能组成一个服务,例如当写一个python程序的时候,使用了redis,那么就要运行两个容器,两个容器的之间的数据交互使用link进行连接,而在一台主机上,每次新建一个环境,都要进行docker run然后一大堆参数,对于记忆来说,是一种挑战。

docker-compose是一种用来运行所有有依赖关系的容器的工具,使用一个命令即可运行所有的服务,运行多个容器,而配置文件则只有一个。

安装docer-compose

安装docker-compose很简单,只要几条指令即可,如下所示:

[root@docker2 ~]# curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose(下载docker-compose的执行文件)

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 617 0 617 0 0 471 0 --:--:-- 0:00:01 --:--:-- 473

100 8288k 100 8288k 0 0 322k 0 0:00:25 0:00:25 --:--:-- 805k

[root@docker2 ~]# chmod +x /usr/local/bin/docker-compose (修改执行权限)

[root@docker2 ~]# docker-compose --version(查看版本信息,验证安装成功)

docker-compose version 1.19.0, build 9e633ef

使用docker-compose来运行服务

总体架构如下所示:

1、 写flask简单服务

主要就是当访问根目录的时候,会显示访问的次数,而此数据记录在redis的容器中。

[root@docker2 kel]# cat app.py

mport time

import redis

from flask import Flask

app = Flask(__name__)

cache = redis.Redis(host='redis', port=6379)

def get_hit_count():

retries = 5

while True:

try:

return cache.incr('hits')

except redis.exceptions.ConnectionError as exc:

if retries == 0:

raise exc

retries -= 1

time.sleep(0.5)

@app.route('/')

def hello():

count = get_hit_count()

return 'Hello World! I have been seen {} times.\n'.format(count)

if __name__ == "__main__":

app.run(host="0.0.0.0", debug=True)

2、 python程序的依赖文件

主要是提供flask相关的依赖程序包。

[root@docker2 kel]# cat requirements.txt

flask

redis

3、 书写dockerfile

主要就是用来生成image镜像。

[root@docker2 kel]# cat Dockerfile

FROM python:3.4-alpine

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

CMD ["python", "app.py"]

4、 书写docker-compose.yml配置文件

主要就是提供相关的配置来运行容器。

[root@docker2 kel]# cat docker-compose.yml

version: '3'

services:

web:

build: .

ports:

- "5000:5000"

redis:

image: "redis:alpine"

5、 启动测试

查看生成的目录如下:

在启动的时候,只要一条指令就好了,如下:

[root@docker2 kel]# docker-compose up

在这个步骤中,会进行编译dockerfile成image文件,然后创建相关的容器,创建网络,最后运行容器提供服务。

[root@docker2 kel]# docker-compose ps(查看运行中的服务)

Name Command State Ports

-----------------------------------------------------------------------------

kel_redis_1 docker-entrypoint.sh redis ... Up 6379/tcp

kel_web_1 python app.py Up 0.0.0.0:5000->5000/tcp

[root@docker2 kel]# curl http://localhost:5000(访问进行测试)

Hello World! I have been seen 1 times.

[root@docker2 kel]# curl http://localhost:5000(访问的时候,数字发生变化,说明已经将相关的数据存储到redis之中)

Hello World! I have been seen 2 times.

6、 需要注意的问题

在docker-compose up之后,如果出现错误,修改了相关的源文件之后,必须进行重新编译,如下:

[root@docker2 kel]# docker-compose down(删除出现错误的容器)

Removing kel_web_1 ... done

Removing kel_redis_1 ... done

Removing network kel_default

[root@docker2 kel]# docker-compose build(重新编译服务)

7、 改进

在开发环境中,如果每次修改了代码,那么每次都要重新进行build,从而可以使用volume进行挂载使用,只要修改docker-compose的配置文件即可,如下:

[root@docker2 kel]# cat docker-compose.yml

version: '3'

services:

web:

build: .

ports:

- "5000:5000"

volumes:

- .:/code

redis:

image: "redis:alpine"

然后重新进行build,然后up即可,那么每次修改代码app.py之后,都不用进行重新编译,只要进行测试就OK了。

总结

1、 docker-compose的出现,让运行一个完整的服务变的很简单,只要写一个配置就好了,其他的工作docker-compose会帮你做完。

2、 docker-compose是用python写的,而我。。。并没有看源代码,我写不出来。。。我很忧伤。。。

3、 本文基本上属于官方文档翻译而来。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-02-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档