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端口。

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

原文地址:https://www.cnblogs.com/chengege/p/12675137.html