💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## 使用 ### 术语 首先介绍几个术语。 - 服务 (`service`):一个应用容器,实际上可以运行多个相同镜像的实例。 - 项目 (`project`):由一组关联的应用容器组成的一个完整业务单元。 可见,一个项目可以由多个服务(容器)关联而成,`Compose` 面向项目进行管理。 ### 场景 最常见的项目是 web 网站,该项目应该包含 web 应用和缓存。 下面我们用 `Python` 来建立一个能够记录页面访问次数的 web 网站。 #### web 应用 新建文件夹,在该目录中编写 `app.py` 文件 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="kwd">from</span><span class="pln"> flask </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Flask</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="kwd">from</span><span class="pln"> redis </span><span class="kwd">import</span><span class="pln"> </span><span class="typ">Redis</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">app </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Flask</span><span class="pun">(</span><span class="pln">__name__</span><span class="pun">)</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">redis </span><span class="pun">=</span><span class="pln"> </span><span class="typ">Redis</span><span class="pun">(</span><span class="pln">host</span><span class="pun">=</span><span class="str">'redis'</span><span class="pun">,</span><span class="pln"> port</span><span class="pun">=</span><span class="lit">6379</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="lit">@app</span><span class="pun">.</span><span class="pln">route</span><span class="pun">(</span><span class="str">'/'</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="kwd">def</span><span class="pln"> hello</span><span class="pun">():</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> count </span><span class="pun">=</span><span class="pln"> redis</span><span class="pun">.</span><span class="pln">incr</span><span class="pun">(</span><span class="str">'hits'</span><span class="pun">)</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="kwd">return</span><span class="pln"> </span><span class="str">'Hello World! 该页面已被访问 {} 次。\n'</span><span class="pun">.</span><span class="pln">format</span><span class="pun">(</span><span class="pln">count</span><span class="pun">)</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="kwd">if</span><span class="pln"> __name__ </span><span class="pun">==</span><span class="pln"> </span><span class="str">"__main__"</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> app</span><span class="pun">.</span><span class="pln">run</span><span class="pun">(</span><span class="pln">host</span><span class="pun">=</span><span class="str">"0.0.0.0"</span><span class="pun">,</span><span class="pln"> debug</span><span class="pun">=</span><span class="kwd">True</span><span class="pun">)</span></code></li> </ol> ``` #### Dockerfile 编写 `Dockerfile` 文件,内容为 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">FROM python</span><span class="pun">:</span><span class="lit">3.6</span><span class="pun">-</span><span class="pln">alpine</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">ADD </span><span class="pun">.</span><span class="pln"> </span><span class="pun">/</span><span class="pln">code</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">WORKDIR </span><span class="pun">/</span><span class="pln">code</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">RUN pip install redis flask</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">CMD </span><span class="pun">[</span><span class="str">"python"</span><span class="pun">,</span><span class="pln"> </span><span class="str">"app.py"</span><span class="pun">]</span></code></li> </ol> ``` #### docker-compose.yml 编写 `docker-compose.yml` 文件,这个是 Compose 使用的主模板文件。 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">version</span><span class="pun">:</span><span class="pln"> </span><span class="str">'3'</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">services</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> web</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> build</span><span class="pun">:</span><span class="pln"> </span><span class="pun">.</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> ports</span><span class="pun">:</span></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="str">"5000:5000"</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"></code></li> <li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> redis</span><span class="pun">:</span></code></li> <li class="l1"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln"> image</span><span class="pun">:</span><span class="pln"> </span><span class="str">"redis:alpine"</span></code></li> </ol> ``` #### 运行 compose 项目 ``` <pre class="prettyprint"><ol class="linenums"><li class="l"><code class="pcalibre10 pcalibre11 pcalibre9"><span class="pln">$ docker</span><span class="pun">-</span><span class="pln">compose up</span></code></li></ol> ``` 此时访问本地 `5000` 端口,每次刷新页面,计数就会加 1。