成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

docker-compose 運(yùn)行 Flask 應(yīng)用最佳實(shí)踐

fasss / 2338人閱讀

摘要:現(xiàn)在有了之后,部署方式變了更加容易,不容易出現(xiàn)配置錯誤,環(huán)境不一致問題。實(shí)際應(yīng)用中,經(jīng)常遇到多個(gè)容器相配合運(yùn)行一套應(yīng)用程序的情況。所以想要將應(yīng)用運(yùn)行在容器中,該容器必須將該應(yīng)用所有的環(huán)境依賴安裝好。


背景

??以前部署應(yīng)用,需要各種環(huán)境配置,各種shell操作才能搭建一套可用的服務(wù)。現(xiàn)在有了Docker之后,部署方式變了更加容易,不容易出現(xiàn)配置錯誤,環(huán)境不一致問題。解決了在本地環(huán)境可以運(yùn)行,遷移到線上出現(xiàn)各種問題,這些問題大多出現(xiàn)在線上和本地環(huán)境有差異,配置容易出現(xiàn)錯誤等情況。那么docker-compose 和 docker 之間存在著什么聯(lián)系呢?

先來看看docker-compose 的定義:
「定義和運(yùn)行多個(gè) Docker 容器的應(yīng)用(Defining and running multi-container Docker applications)」

??我們知道 docker 可以通過 Dockerfile 模板文件來定義一個(gè)應(yīng)用容器。實(shí)際應(yīng)用中,經(jīng)常遇到多個(gè)容器相配合運(yùn)行一套應(yīng)用程序的情況。比如,實(shí)現(xiàn)一個(gè)Flask應(yīng)用,除了 Flask 服務(wù)本身之外,還需要一些數(shù)據(jù)庫服務(wù)容器等。Compose 恰好滿足了這樣的需求。它允許用戶通過一個(gè)多帶帶的 docker-compose.yml 模板文件(YAML 格式)來定義一組相關(guān)聯(lián)的應(yīng)用容器為一個(gè)項(xiàng)目(project)。
??通過 Docker-Compose 用戶可以很容易地用一個(gè)配置文件定義一個(gè)多容器的應(yīng)用,然后使用一條指令安裝這個(gè)應(yīng)用的所有依賴,完成構(gòu)建。Docker-Compose解決了容器與容器之間如何管理編排的問題。

實(shí)施步驟 使用 Dockerfile 定制鏡像

??鏡像的定制實(shí)際上就是定制每一層所添加的配置、文件,因?yàn)?Flask 應(yīng)用需要一些環(huán)境依賴才能運(yùn)行起來。所以想要將 Flask 應(yīng)用運(yùn)行在 Docker 容器中,該容器必須將該應(yīng)用所有的環(huán)境依賴安裝好。而 Dockerfile 就是提供給我們配置相關(guān)的環(huán)境依賴等操作。Dockerfile 是一個(gè)文本文件,其內(nèi)包含了一條條的指令(Instruction),每一條指令構(gòu)建一層,因此每一條指令的內(nèi)容,就是描述該層應(yīng)當(dāng)如何構(gòu)建。

下面以我的GitHub項(xiàng)目 flask-v2ex 應(yīng)用的 Dockerfile 文件為例:

FROM daocloud.io/python:3.5

MAINTAINER Guoweikuang 
RUN mkdir -p /home/guoweikuang/app 
WORKDIR /home/guoweikuang/app 

ADD ./requirements.txt /home/guoweikuang/app/requirements.txt 

RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip 
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 

ADD . /home/guoweikuang/app 

CMD python manage.py runserver -h 0.0.0.0

FROM: 指定了基礎(chǔ)鏡像,以該鏡像為基礎(chǔ),在其上進(jìn)行定制操作
MAINTAINER: 用來指定鏡像創(chuàng)建者信息
RUN: 創(chuàng)建了 **/home/guoweikuang/app** 文件夾 (后面 RUN pip3 安裝Python擴(kuò)展庫)
WORKDIR: 切換目錄,可以多次切換(相當(dāng)于cd命令)
ADD: 從本地目錄相應(yīng)文件拷貝到容器路徑里
CMD: 設(shè)置container啟動時(shí)執(zhí)行的操作,運(yùn)行 Flask 應(yīng)用并設(shè)置host為0.0.0.0
編寫 docker-compose.yml 文件

docker-compose.yml 文件將把所有的東西關(guān)聯(lián)起來。它描述了應(yīng)用的構(gòu)成(一個(gè) web 服務(wù)和一個(gè)數(shù)據(jù)庫)、使用的 Docker 鏡像、鏡像之間的連接、掛載到容器的卷,以及服務(wù)開放的端口。

下面以我的GitHub項(xiàng)目 flask-v2ex 應(yīng)用的 docker-compose.yml 文件為例:

version: "2"

services:
  web:
    build: .
    container_name: flask_v2ex
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

compose 中定義了兩個(gè)服務(wù) web 和 redis。

web 服務(wù)

build: 使用當(dāng)前目錄的 Dockerfile build 的鏡像

ports: 映射宿主機(jī) 5000 端口到容器的 5000 端口

container_name: 指定了容器的名字

redis 服務(wù)

image: 使用 Docker Hub 中的 redis 鏡像

使用 compose 構(gòu)建并運(yùn)行 Flask 應(yīng)用

在運(yùn)行 docker-compose up 之前,需要做一些修改,把項(xiàng)目里關(guān)于redis連接配置進(jìn)行修改

r = redis.Redis(host="localhost", port=6379, decode_responses=True)

修改為:

r = redis.Redis(host="redis", port=6379, decode_responses=True)

在flask-v2ex 項(xiàng)目的根目錄下使用 docker-compose up 命令,如下所示:

$ docker-compose up

Starting flask_v2ex         ... done
Starting flask_v2ex_redis_1 ... done
Attaching to flask_v2ex_redis_1, flask_v2ex
redis_1  | 1:C 01 Jul 07:46:52.053 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1  | 1:C 01 Jul 07:46:52.053 # Redis version=4.0.6, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1  | 1:C 01 Jul 07:46:52.053 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
redis_1  | 1:M 01 Jul 07:46:52.064 * Running mode=standalone, port=6379.
redis_1  | 1:M 01 Jul 07:46:52.064 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
redis_1  | 1:M 01 Jul 07:46:52.064 # Server initialized
redis_1  | 1:M 01 Jul 07:46:52.065 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command "echo never > /sys/kernel/mm/transparent_hugepage/enabled" as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
redis_1  | 1:M 01 Jul 07:46:52.065 * DB loaded from disk: 0.000 seconds
redis_1  | 1:M 01 Jul 07:46:52.065 * Ready to accept connections
flask_v2ex |  * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
flask_v2ex |  * Restarting with stat
flask_v2ex |  * Debugger is active!
flask_v2ex |  * Debugger PIN: 742-073-002

可以看到 Docker 守護(hù)進(jìn)程里監(jiān)聽著 5000 端口了。可以通過http://localhost:5000 訪問 Flask 應(yīng)用。

docker-compose 使用

docker-compose up -d : 后臺運(yùn)行

docker-compose stop: 停止正在運(yùn)行的服務(wù)

docker-compose down: 關(guān)閉所有容器并刪除,默認(rèn)保留 數(shù)據(jù)卷

docker-compose ps:列出當(dāng)前運(yùn)行的服務(wù)狀態(tài)和相關(guān)信息

$ docker-compose ps
       Name                     Command               State           Ports
------------------------------------------------------------------------------------
flask_v2ex           /bin/sh -c python manage.p ...   Up      0.0.0.0:5000->5000/tcp
flask_v2ex_redis_1   docker-entrypoint.sh redis ...   Up      6379/tcp

docker-compose run: 一次性命令。 例如查看 web 服務(wù)的環(huán)境變量:

$ docker-compose run web env 

PATH=/usr/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=e4b6b17f39dc
TERM=xterm
LANG=C.UTF-8
GPG_KEY=97FC712E4C024BBEA48A61ED3A5CA953F73C700D
PYTHON_VERSION=3.5.4
PYTHON_PIP_VERSION=9.0.1
HOME=/root

如果需要停止已經(jīng)運(yùn)行中的服務(wù),可以通過ctrl + c 或者 docker-compose stop 來停止服務(wù)。

參考

Docker從入門到實(shí)踐 --實(shí)戰(zhàn)Django
使用Dockerfile構(gòu)建Docker鏡像

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/27567.html

相關(guān)文章

  • docker-compose 運(yùn)行 Flask 應(yīng)用最佳實(shí)踐

    摘要:現(xiàn)在有了之后,部署方式變了更加容易,不容易出現(xiàn)配置錯誤,環(huán)境不一致問題。實(shí)際應(yīng)用中,經(jīng)常遇到多個(gè)容器相配合運(yùn)行一套應(yīng)用程序的情況。所以想要將應(yīng)用運(yùn)行在容器中,該容器必須將該應(yīng)用所有的環(huán)境依賴安裝好。 showImg(https://segmentfault.com/img/remote/1460000017081815); 背景 ??以前部署應(yīng)用,需要各種環(huán)境配置,各種shell操作...

    sumory 評論0 收藏0
  • 被忽略的后臺開發(fā)神器 — Docker

    摘要:后來真正用的時(shí)候才發(fā)覺,這個(gè)簡直是個(gè)神器。容器可以被創(chuàng)建啟動停止刪除暫停等。項(xiàng)目由編寫,實(shí)現(xiàn)上調(diào)用了服務(wù)提供的來對容器進(jìn)行管理。此命令將會停止命令所啟動的容器,并移除網(wǎng)絡(luò)啟動已經(jīng)存在的服務(wù)容器。停止已經(jīng)處于運(yùn)行狀態(tài)的容器,但不刪除它。 showImg(https://segmentfault.com/img/remote/1460000017531120?w=1200&h=500); ...

    warnerwu 評論0 收藏0
  • 被忽略的后臺開發(fā)神器 — Docker

    摘要:后來真正用的時(shí)候才發(fā)覺,這個(gè)簡直是個(gè)神器。容器可以被創(chuàng)建啟動停止刪除暫停等。項(xiàng)目由編寫,實(shí)現(xiàn)上調(diào)用了服務(wù)提供的來對容器進(jìn)行管理。此命令將會停止命令所啟動的容器,并移除網(wǎng)絡(luò)啟動已經(jīng)存在的服務(wù)容器。停止已經(jīng)處于運(yùn)行狀態(tài)的容器,但不刪除它。 showImg(https://segmentfault.com/img/remote/1460000017531120?w=1200&h=500); ...

    CollinPeng 評論0 收藏0
  • Flask Web 測試驅(qū)動開發(fā)最佳實(shí)踐Flask 實(shí)例

    摘要:當(dāng)功能越來越復(fù)雜的時(shí)候,你可能修改了一些東西,導(dǎo)致另外一個(gè)功能的不可用,而單元測試也能保證了原有功能被破壞后能被檢測出來。 showImg(https://segmentfault.com/img/remote/1460000017081749); 前言 前一篇講到了 TDD 測試驅(qū)動開發(fā)的相關(guān)概念和環(huán)境搭建,這篇就著手開始用TDD方式開發(fā)了。首先這篇需要編寫用戶相關(guān)的API接口,如...

    wuyangnju 評論0 收藏0
  • Docker-Compose官方學(xué)習(xí)筆記(2)起步構(gòu)建一個(gè)多容器app應(yīng)用

    摘要:使用構(gòu)建一個(gè)創(chuàng)建一個(gè)文件夾創(chuàng)建腳本這個(gè)腳本使用了和的包,并且啟動了一個(gè)服務(wù)端口創(chuàng)建構(gòu)建的由于在的時(shí)候,默認(rèn)會去官方去獲取,國內(nèi)是無法訪問的,所以這里使用了的鏡像去下載包。 使用docker-compose構(gòu)建一個(gè)python-web app 創(chuàng)建一個(gè)文件夾 python-web-app $mkdir python-web-app $cd python-web-app 2.創(chuàng)建pytho...

    BWrong 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<