Docker compose 入门

本文介绍了Docker Compose的安装及应用实例,通过一个包含Python Flask后端和PHP前端服务的例子,展示了如何使用Docker Compose简化多服务部署,避免了单独编译和管理多个容器的复杂性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个web会有很多的服务,如何按照之前Dokcer的我们需要创建很多个container,这样会很麻烦,那么如何让多个服务在docker中简单的实现呢?

安装dokcer-compose

关于安装方法可以直接参考官网的安装说明

https://docs.docker.com/compose/install/#install-compose

应用实例

我们将将在这个例子中使用python来搭建后端的服务,使用php来展示前端的页面。python后端使用flask

python: api.py

# product service
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)

class Product(Resource):
    def get(self):
        return {
            'products': ['Ice cream',
                        'Chocolate',
                        'Fruit']
        }
api.add_resource(Product, '/')

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=80, debug=True)

python : requirements.txt

Flask==0.12
flask-restful==0.3.5

Dockerfile

FROM python:3-onbuild
COPY . /usr/src/app
CMD ["python", "api.py"]

这样我们就可以实现一个container的运行了,但是如果我们有很多的应用,相互之前是需要同时运行的,这样我们每次编译的时候都需要编译多个container,这样非常麻烦,这个时候我们就可以使用Docker compose来完成这一工作。

我们将上面的内容放在product文件夹中,然后在文件夹外面创建一个docker-compose.yml文件

docker-compose.yml(注意格式!不能使用tab,需要为空格)

version: '3'

services:
    product-service:
        build: ./product
        volumes:
            - ./product:/usr/src/app
        ports:
            - 5001:80
docker-compose up

然后我们就可以访问得到的结果:

localhost:5001

然后我们创建一个新的文件夹叫做website

index.php

<html>
    <head>
        <title>My shop</title>
    </head>

    <body>
        <h1>Welcome to my shop</hi>
        <ul>
            <?php
                $json = file_get_contents('http://product-service');
                $obj = json_decode($json);
                $products = $obj->products;
                foreach ($products as $product)
                {
                    echo "<li>$product</li>";
                }
            ?>
        </ul>
    </body>
</html>

然后修改docker-compose.yml文件如下:

version: '3' 

services:
    product-service:
        build: ./product
        volumes:
         - ./product:/usr/src/app
        ports:
        - 5001:80
    website:
        image: php:apache
        volumes:
          - ./website:/var/www/html
        ports:
          - 5000:80
        depends_on:
          - product-service

视频来自:
https://www.youtube.com/watch?v=Qw9zlE3t8Ko

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值