容器组织服务docker-compose

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79358395
序言

    在使用容器的时候,我们总是要运行很多的容器,才能组成一个服务,例如当写一个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来运行服务

    总体架构如下所示:

640?wx_fmt=png

    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、 启动测试

    查看生成的目录如下:

640?wx_fmt=png

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

[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、 本文基本上属于官方文档翻译而来。

    

猜你喜欢

转载自blog.csdn.net/TM6zNf87MDG7Bo/article/details/79358395