Docker搞一個flask的image, 然后通過端口映射讓別人可以訪問


from flask import Flask

app = Flask(__name__) @app.route("/") def hello(): return "hello docker" if __name__ == "__main__": app.run(host="0.0.0.0", port="5000") # 使用0.0.0.0 這樣才可以保證其他地址可以方位。 端口和Dockerfile 中的 EXPOES 的端口, 保持一致

這是一段py的代碼。  運行之后會在 127.0.0.1:5000的端口上。

把他搞成一個image。  所以我們需要python解釋器。 我用的 python3.7.7

 

創建一個Dockerfile

FROM python:3.7.7                          # 我這個image使用的 base image是  python:3.7.7 再docker hub上可以找到
LABEL maintainer="這是一個py3.7的東西"       # 一個注釋
RUN pip install flask                      # 需要下載 flask的第三方包
COPY app.py
/app/ # 將app.py 這個文件 添加到我這個image的 根目錄下的app目錄之下。(app 沒有會自動創建) WORKDIR /app # 指定后面的CMD 或者 ENTRYPOINT 命令的,工作目錄
EXPOSE 5000 # 將我們這個運行的容器的 5000 端口向外暴漏 CMD [
"python", "app.py"] # 執行命令

### COPY 這里要注意一下子, 
           COPY  app.py  /app 這樣子是  將app.py 這個文件 復制到 / 根目錄下。並且起名 app  
           COPY  app.py  /app/   這樣才是將app.py 這個文件復制到 app 這個目錄下。  (沒有的目錄 在docker build時, 會自動創建)

 

目錄結構:

-python-flask
    - app.py
    - Dockerfile

[miller@docker4 python-flask]$ docker build -t caijiwandocker/flask-hello-world .  # 最后面的 . 意思就是當前目錄。

 

構建完成之后, 我們就得到了一個 image , 運行起來

 

[miller@docker4 python-flask]$ docker run caijiwandocker/flask-hello-world
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

       程序會在這里  夯住。   可以看到運行的端口在  127.0.0.1:5000   

 
[miller@docker4 python-flask]$ docker run -d caijiwandocker/flask-hello-world   # -d  后台運行。
 a6ba341c83c2e86b36e993073aa6739b5d7bcabad9d6b52a8e2152aabc7409ed
 

[miller@docker4 python-flask]$ docker ps
CONTAINER ID IMAGE                             COMMAND            CREATED              STATUS              PORTS       NAMES
a6ba341c83c2 caijiwandocker/flask-hello-world  "python3 app.py"   About a minute ago   Up About a minute   5000/tcp    naughty_robinson

 

如果希望, 其他的電腦也可以進行訪問的話。 就需要將docker 容器拋出的 端口, 和我們安裝docker的主機上的端口, 做一個映射。

[miller@docker4 python-flask]$ docker run -d -p 8080:5000 caijiwandocker/flask-hello-world

如此就是 將主機上的 8080 端口, 和 docker 容器拋出的5000端口做一個映射。

這樣當我們訪問安裝 的docker主機 的8080 端口的時候, 就直接訪問了  docker 容器中的 flask app這個 web 應用的5000端口了。

 

ps:如果docker的主機, 是一個雲主機或者什么服務器把, 只要他又有公有的 ip 地址。 那么我們就可以通過  共有ip:8080 從而訪問到 docker容器中開啟的

  這個web 服務了。 即使這個容器拋出的是5000端口。

  (一般 容器拋出啥, 就映射啥。 方便。   這里只是為了體現一下區別。)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM