通過前幾次學習,對於docker的網路特別是單機,今天這次主要一起來看比較複雜的,會用到前面學到的docker的網路知識。今天創建一個application。這篇的源碼在:https://github.com/limingios/docker.git 中的docke/No.2/labs/flask-redis/
程序解釋:啟動一個應用程序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)
引用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的方式給容器內設置環境變數的方式,方便應用的訪問。