Docker的那些事儿—一个例子教你docker compose是如何使用的(一)?


上一篇:Docker的那些事儿—如何安装docker-compose?


安装了Compose,下面就来通过一个例子认识Docker Compose是如何使用的?

目标:通过Docker Compose构建一个简单的Python Web应用程序,并且借助redis实现简单的计数功能。

Step 1:定义应用的依赖关系

1、创建项目目录:mycompose

2、在项目目录下创建app.py文件,内容如下:


import 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.ConnectionErroras 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)


3、在项目目录下创建requirements.txt文件,内容如下:


flask

redis


Step 2:创建Dockerfile文件

在项目目录下创建名字为Dockerfile文件,内容如下:


FROM python:3.4-alpine

ADD . /code

WORKDIR /code

RUN pip install -r requirements.txt

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


Step 3:定义Compose文件

在项目目录下创建名字为docker-compose.yml文件,内容如下:


version: '3'

services:

  web:

    build: .

    ports:

     -"5000:5000"

  redis:

    image:"redis:alpine"


上述Compose文件定义了两个服务:web服务和redis服务。其中redis服务使用的是Docker Hub上的镜像;web服务使用的是上述Dockerfile构建的镜像,并且做了端口的映射。

Step 4:使用Compose构建并运行应用

在项目目录下,执行docker-compose up启动应用


root@Ubuntu-001:~/mycompose#docker-compose up

Creating network"mycompose_default" with the default driver

Building web

Step 1/5 : FROM python:3.4-alpine

3.4-alpine: Pulling fromlibrary/python

81033e7c1d6a: Pull complete

9b61101706a6: Pull complete

415e2a07c89b: Pull complete

f22df7a3f000: Pull complete

8c16bf19c1f9: Pull complete

Digest:sha256:fe436cb066394d81cf49448a04dec7c765082445a500bc44f1ae5e8a455793bd

Status: Downloaded newerimage for python:3.4-alpine

 ---> 5c72717ec319

Step 2/5 : ADD . /code

 ---> 7b20a034f7a4

Step 3/5 : WORKDIR /code

Removing intermediatecontainer c837500a2226

 ---> d77fc02cacc1

Step 4/5 : RUN pip install -rrequirements.txt

 ---> Running in 59d8d8c0ecf6

Collecting flask (from -rrequirements.txt (line 1))

  Downloading Flask-0.12.2-py2.py3-none-any.whl(83kB)

Collecting redis (from -rrequirements.txt (line 2))

  Downloading redis-2.10.6-py2.py3-none-any.whl(64kB)

Collecting Werkzeug>=0.7(from flask->-r requirements.txt (line 1))

  DownloadingWerkzeug-0.14.1-py2.py3-none-any.whl (322kB)

Collecting click>=2.0(from flask->-r requirements.txt (line 1))

  Downloading click-6.7-py2.py3-none-any.whl(71kB)

Collecting Jinja2>=2.4(from flask->-r requirements.txt (line 1))

  Downloading Jinja2-2.10-py2.py3-none-any.whl(126kB)

Collectingitsdangerous>=0.21 (from flask->-r requirements.txt (line 1))

  Downloading itsdangerous-0.24.tar.gz (46kB)

CollectingMarkupSafe>=0.23 (from Jinja2>=2.4->flask->-r requirements.txt(line 1))

  Downloading MarkupSafe-1.0.tar.gz

Building wheels for collectedpackages: itsdangerous, MarkupSafe

  Running setup.py bdist_wheel for itsdangerous:started

  Running setup.py bdist_wheel foritsdangerous: finished with status 'done'

  Stored in directory:/root/.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a

  Running setup.py bdist_wheel for MarkupSafe:started

  Running setup.py bdist_wheel for MarkupSafe:finished with status 'done'

  Stored in directory:/root/.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57

Successfully builtitsdangerous MarkupSafe

Installing collectedpackages: Werkzeug, click, MarkupSafe, Jinja2, itsdangerous, flask, redis

Successfully installedJinja2-2.10 MarkupSafe-1.0 Werkzeug-0.14.1 click-6.7 flask-0.12.2itsdangerous-0.24 redis-2.10.6

Removing intermediatecontainer 59d8d8c0ecf6

 ---> 51143f11c451

Step 5/5 : CMD["python", "app.py"]

 ---> Running in 422960a19b01

Removing intermediatecontainer 422960a19b01

 ---> de5cc3ead62d

Successfully builtde5cc3ead62d

Successfully taggedmycompose_web:latest

WARNING: Image for serviceweb was built because it did not already exist. To rebuild this image you mustuse `docker-compose build` or `docker-compose up --build`.

Pulling redis(redis:alpine)...

alpine: Pulling fromlibrary/redis

ff3a5c916c92: Pull complete

aae70a2e6027: Pull complete

87c655da471c: Pull complete

a0bd51ac7350: Pull complete

755565c3ea2b: Pull complete

8bf100ea488d: Pull complete

Digest:sha256:4f54ade2260d5c80283d044ab9657f390cb8effd9a7a847765693a3670f6874a

Status: Downloaded newerimage for redis:alpine

Creating mycompose_web_1   ... done

Creating mycompose_redis_1... done

Attaching tomycompose_redis_1, mycompose_web_1

redis_1  | 1:C 08 Mar 14:41:49.790 # oO0OoO0OoO0OoRedis is starting oO0OoO0OoO0Oo

redis_1  | 1:C 08 Mar 14:41:49.790 # Redisversion=4.0.8, bits=64, commit=00000000, modified=0, pid=1, just started

redis_1  | 1:C 08 Mar 14:41:49.790 # Warning: noconfig file specified, using the default config. In order to specify a configfile use redis-server /path/to/redis.conf

redis_1  | 1:M 08 Mar 14:41:49.798 * Runningmode=standalone, port=6379.

redis_1  | 1:M 08 Mar 14:41:49.798 # WARNING: The TCPbacklog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconnis set to the lower value of 128.

redis_1  | 1:M 08 Mar 14:41:49.798 # Serverinitialized

redis_1  | 1:M 08 Mar 14:41:49.798 # WARNINGovercommit_memory is set to 0! Background save may fail under low memorycondition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.confand then reboot or run the command 'sysctl vm.overcommit_memory=1' for this totake effect.

redis_1  | 1:M 08 Mar 14:41:49.798 # WARNING you haveTransparent Huge Pages (THP) support enabled in your kernel. This will create latencyand memory usage issues with Redis. To fix this issue run the command 'echonever > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it toyour /etc/rc.local in order to retain the setting after a reboot. Redis must berestarted after THP is disabled.

redis_1  | 1:M 08 Mar 14:41:49.799 * DB loaded fromdisk: 0.000 seconds

redis_1  | 1:M 08 Mar 14:41:49.799 * Ready to acceptconnections

web_1    |  *Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

web_1    |  *Restarting with stat

web_1    |  *Debugger is active!

web_1    |  *Debugger PIN: 246-553-608


从docker-compose up的过程可以总结如下:

1、构建mycompose_default网络,该网络供下面容器启动使用

2、基于Dockerfile构建mycompose_web:latest镜像

3、从Docker Hub pull redis:alpine镜像

4、分别启动mycompose_web_1和mycompose_redis_1容器

5、Attach到mycompose_web_1和mycompose_redis_1容器

注意:这里无论创建的网络、镜像还是容器,其前缀名都是基于项目名的

打开新的终端窗口,查询运行的容器

打开浏览器键入http://192.168.1.106:5000,其中192.168.1.106是Ubuntu-001主机的IP

刷新页面后

可以看到收到两条get请求,浏览器每刷新一次,发送一条get请求

其中192.168.1.101是我的本地电脑的IP

打开新的终端,查询镜像

在原来的终端窗口按CTRL+C或者在新的终端窗口使用docker-compose down停止应用



下一篇:Docker的那些事儿—一个例子教你docker compose是如何使用的(二)?


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容