zoukankan      html  css  js  c++  java
  • 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端口。

      (一般 容器抛出啥, 就映射啥。 方便。   这里只是为了体现一下区别。)

  • 相关阅读:
    隐藏控件标签
    在线删除文件asp.net c#
    access数据库在线生成xls电子表格
    html5 css练习,弹性三栏布局
    html5 css多列布局
    Java利用webservice创建接口案例源码
    Java-Tomcat内存溢出详解
    Linux基本命令——ps/top
    Weka——如何连接MySQL数据库
    Longest Substring Without Repeating Characters
  • 原文地址:https://www.cnblogs.com/chengege/p/12675137.html
Copyright © 2011-2022 走看看