通過前幾次學習,對於docker的網路特別是單機,今天這次主要一起來看比較複雜的,會用到前面學到的docker的網路知識。今天創建一個application。這篇的源碼在:github.com/limingios/do 中的docke/No.2/labs/flask-redis/

源碼分析

  • application的app.py

程序解釋:啟動一個應用程序web端,訪問一個redis,用戶每次訪問redis對應的key就會增加1,app的主機,埠是5000

from flask import Flask
from redis import Redis
import os
import socket

app = Flask(__name__)
redis = Redis(host=os.environ.get(REDIS_HOST, 127.0.0.1), port=6379)

@app.route(/)
def hello():
redis.incr(hits)
return Hello Container World! I have been seen %s times and my hostname is %s.
% (redis.get(hits),socket.gethostname())

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

  • docker的Dockerfile

引用pyhon2.7的image,主機目錄的app,拷貝到app目錄下,運行pip按照python的插件,暴露5000埠,運行 python app.py

FROM python:2.7
LABEL maintaner="1??úo?£o±à3ì?óì??à [email protected]"
COPY . /app
WORKDIR /app
RUN pip install flask redis
EXPOSE 5000
CMD [ "python", "app.py" ]

  • 開始構建

ls
cd labs
cd flask-redis
ls

sudo service docker restart
sudo docker run -d --name redis redis
sudo docker ps

有老鐵會問,為啥不用上幾節說的-p啊 -p 6379:6379 我這是為了內部訪問啊,不需要暴露出來。.

#懟上加速器
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io
sudo service docker restart
#創建對應的鏡像image
sudo docker build -t liming/flask-redis .

  • 創建容器

sudo docker container start redis
#通過-e 命令,把環境變數REDIS_HOST=redis 放入容器的環境變數中
sudo docker run -d --link redis --name flask-redis2 -e REDIS_HOST=redis liming/flask-redis
sudo docker exec -it flask-redis2 /bin/sh
env
#效果就出來了
curl 127.0.0.1:5000

  • 我們把容器刪除,然後把容器的埠映射到埠宿主機上

sudo docker stop flask-redis2
sudo docker rm flask-redis2
sudo docker run -d -p 5000:5000 --link redis --name flask-redis2 -e REDIS_HOST=redis liming/flask-redis

圖例解釋今天的部署

PS:有2個容器,他們有訪問的關係。通過這個例子大家可以想到現實的例子很多項目有前後臺之分的,有資料庫,有前端,有後端,對於分模塊的項目中,我們推薦使用容器的方式,可以給每個模塊放入不同的容器。還講了-e的方式給容器內設置環境變數的方式,方便應用的訪問。


推薦閱讀:
相關文章