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并保存,刷新浏览器,你会发现内容实时刷新了。

  • 相关阅读:
    JSP九大内置对象的作用和用法总结(转)
    Java web的几种异常处理 (转)
    response.getWriter().write()与out.print()的区别(转)
    【JavaWeb】Session(转)
    java web中cookies的用法 转
    1123
    1120
    jsp 内置对象
    include与jsp:include区别
    11.24作业1
  • 原文地址:https://www.cnblogs.com/ZJT7098/p/12357417.html
Copyright © 2011-2022 走看看