zoukankan      html  css  js  c++  java
  • 用Docker搭建web开发环境

    需要解决的主要问题:如何在宿主机修改代码,在容器中实时刷新代码效果。

    解决方案就是VOLUME,挂载。具体操作方式也有多种,本文通过编写compose文件的方式来实现挂载。

    本文假设读者已经了解Docker的基础知识:镜像、容器的概念,Docker的基本操作。

    笔者使用docker的思想是:镜像作为材料,Compose作为蓝图,通过修改蓝图来生成分别适用于开发、测试、生产环境的容器。

    镜像是一个相对比较固定的部分。

    具体实践是:Dockerfile来生成镜像,镜像包含运行时的必要条件(库依赖、源码之类)。Compose来决定运行时的环境(容器连接、挂载、环境变量等)。

    以flask项目为例。

    新建一个目录叫 flask-demo, 这个目录将存放我们的项目源码和Dockerfile文件。

    $ mkdir flask-demo
    
    $ cd flask-demo
    

    新建一个flask项目

    在flask-demo里创建一个目录叫hello,并创建flask项目放于该目录。

    现在的目录结构是这样的

    flask-demo
    	- hello  # 这里就是flask项目
    		- app.py
    		- ..... 
    

    app.py文件如下:

    from flask import Flask
    
    app = Flask(__name__)
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    if __name__ == '__main__':
        app.run()
    

    通过Dockerfile创建新镜像

    创建一个镜像,该镜像包含web源码和web的依赖。

    在flask-demo目录里,创建Dockerfile文件

    Dockerfile

    FROM python
    
    RUN apt-get update
    
    RUN pip install flask
    
    WORKDIR /app
    
    COPY ./hello /app/hello
    
    ENTRYPOINT FLASK_APP=/app/hello/app.py flask run  -h 0.0.0.0  -p 80
    
    EXPOSE 80
    

    生成镜像

    # build一个名为flask-demo的镜像
    $ docker build -t flask-demo ./
    # 运行flask-demo镜像. 将宿主机的5000端口映射到容器的80端口
    $ docker run -p 5000:80 flask-demo
    

    现在,浏览器输入 http://localhost:5000 就可以看到正常运行的网页了。

    那么,证明我们的镜像是OK的了。

    但是,现在宿主机修改代码,容器是不会刷新的,因为容器里面的代码只是一份拷贝。

    现在,我们来编写compose文件

    还是在flask-demo目录里,新建文件docker-compose.yml

    docker-compose.yml

    version: "3"
    
    services:
      flask-demo:
        build: ./
        ports:
          - "5000:80"
        volumes:
          - ./hello:/app/hello   #将容器里面的/app/hello挂载到宿主机的./hello目录
        environment:
          - FLASK_ENV=development  # 指定开发环境,修改代码会实时刷新项目
    
    

    (如果Dockerfile和docker-compose.yml有相同的字段配置,那么会优先采用docker-compose.yml的配置。)

    现在来测试一下我们的compose文件。

    【记得把刚才运行的容器停止了】

    执行以下命令来运行容器

    $ docker-compose up
    

    现在,浏览器输入 http://localhost:5000 就看到正常运行的网页了。

    然后修改flask项目的app.py并保存,刷新浏览器,你会发现内容实时刷新了。

  • 相关阅读:
    iot 表索引dump《2》
    heap表和iot表排序规则不同
    Cannot complete the install because one or more required items could not be found.
    iot表输出按主键列排序,heap表不是
    iot 表主键存放所有数据,且按数据插入顺序排序
    iot表和heap表排序规则不同
    org.eclipse.graphiti.ui.editor.DiagramEditorInput.
    Oracle 排序规则
    perl 异步超时 打印错误
    14.6.3 Grouping DML Operations with Transactions 组DML操作
  • 原文地址:https://www.cnblogs.com/ZJT7098/p/12357417.html
Copyright © 2011-2022 走看看