前言:準(zhǔn)備Docker虛機(jī)
- 安裝vm虛機(jī)及docker
- 修改虛機(jī)ip地址妻率,例如:172.16.3.79
第一部分:實(shí)現(xiàn)Product Service
- 編寫/servicetest/product/api.py
from flask import Flask
from flask_restful import Resource, Api
app = Flask(__name__)
api = Api(app)
class Product(Resource):
def get(self):
return {'product': ['Ice cream',
'Chocolate',
'Fruit']}
api.add_resource(Product, '/')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
- 編寫/servicetest/product/requirements.txt
Flask==0.12
flask-restful==0.3.5
- 編寫/servicetest/product/Dockerfile
FROM python:3-onbuild
COPY . /usr/src/app
CMD ["python","api.py"]
- 編寫/servicetest/docker-compose.yml
# 版本號為v3
version: '3'
services:
product-service:
# 通過product子目錄中的Dockerfile構(gòu)建容器
build: ./product
# 將容器中的/usr/src/app與本機(jī)的/product對應(yīng)
volumes:
- ./product:/usr/src/app
# 容器內(nèi)80端口與本機(jī)5001端口對應(yīng)
ports:
- 5001:80
- 構(gòu)建并運(yùn)行容器
cd /servicetest
docker-compose up
在瀏覽器中訪問http://172.16.3.79:5001即可看到輸出JSON的格式數(shù)據(jù)
修改api.py赠法,添加product中的項(xiàng),刷新瀏覽器即可看到變化
第二部分:實(shí)現(xiàn)Website
- 編寫/servicetest/website/index.php
<html>
<head>
<title>My Shop</title>
</head>
<body>
<h1>Welcome to my shop</h1>
<ul>
<?php
# 獲取product容器的json數(shù)據(jù)
$json = file_get_contents('http://product-service');
# 用json進(jìn)行解碼
$obj = json_decode($json);
# 獲取每個對象的product屬性
$products = $obj->product;
# 輸出每個對象的product值
foreach ($products as $product) {
echo "<li>$product</li>";
}
?>
</ul>
</body>
</html>
- 修改/servicetest/docker-compose.yml
version: '3'
services:
product-service:
build: ./product
volumes:
- ./product:/usr/src/app
ports:
- 5001:80
website:
# 從官網(wǎng)的php鏡像構(gòu)建
image: php:apache
# 容器內(nèi)的/var/www/html目錄與本機(jī)的./website對應(yīng)
volumes:
- ./website:/var/www/html
# 容器內(nèi)80端口與本機(jī)5000端口對應(yīng)
ports:
- 5000:80
# 依托于上面product-service的容器
depends_on:
- product-service
- 構(gòu)建并運(yùn)行容器
cd /servicetest
docker-compose up
在瀏覽器中訪問http://172.16.3.79:5000即可看到輸出數(shù)據(jù)
也可從后臺啟動
docker-compose up -d
可檢查是否容器啟動
docker ps
停止docker
docker-compose stop