docker-compose 運行 Flask 應用最佳實踐


背景

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

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

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

實施步驟

使用 Dockerfile 定制鏡像

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

下面以我的GitHub項目 flask-v2ex 應用的 Dockerfile 文件為例:

FROM daocloud.io/python:3.5MAINTAINER Guoweikuang <guoweikuang2015@gmail.com>
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.0FROM: 指定了基礎鏡像,以該鏡像為基礎,在其上進行定制操作
MAINTAINER: 用來指定鏡像創建者信息
RUN: 創建了 **/home/guoweikuang/app** 文件夾 (后面 RUN pip3 安裝Python擴展庫)
WORKDIR: 切換目錄,可以多次切換(相當于cd命令)
ADD: 從本地目錄相應文件拷貝到容器路徑里
CMD: 設置container啟動時執行的操作,運行 Flask 應用并設置host為0.0.0.0

編寫 docker-compose.yml 文件

docker-compose.yml 文件將把所有的東西關聯起來。它描述了應用的構成(一個 web 服務和一個數據庫)、使用的 Docker 鏡像、鏡像之間的連接、掛載到容器的卷,以及服務開放的端口。

下面以我的GitHub項目 flask-v2ex 應用的 docker-compose.yml 文件為例:

version: '2'services:web:build: .container_name: flask_v2exports:- "5000:5000"redis:image: "redis:alpine"

compose 中定義了兩個服務 web 和 redis。

  • web 服務

    • build: 使用當前目錄的 Dockerfile build 的鏡像
    • ports: 映射宿主機 5000 端口到容器的 5000 端口
    • container_name: 指定了容器的名字
  • redis 服務

    • image: 使用 Docker Hub 中的 redis 鏡像

使用 compose 構建并運行 Flask 應用

在運行 docker-compose up 之前,需要做一些修改,把項目里關于redis連接配置進行修改

r = redis.Redis(host='localhost', port=6379, decode_responses=True)修改為:r = redis.Redis(host='redis', port=6379, decode_responses=True)

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

$ docker-compose upStarting 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 守護進程里監聽著 5000 端口了。可以通過http://localhost:5000 訪問 Flask 應用。

docker-compose 使用

  • docker-compose up -d : 后臺運行
  • docker-compose stop: 停止正在運行的服務
  • docker-compose down: 關閉所有容器并刪除,默認保留 數據卷
  • docker-compose ps:列出當前運行的服務狀態和相關信息
$ docker-compose psName                     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 服務的環境變量:
$ 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

如果需要停止已經運行中的服務,可以通過ctrl + c 或者 docker-compose stop 來停止服務。

參考

Docker從入門到實踐 --實戰Django
使用Dockerfile構建Docker鏡像

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一次性搞懂JavaScript正則表達式之語法

本文是『horseshoeRegex專題』系列文章之一&#xff0c;后續會有更多專題推出GitHub地址&#xff1a;https://github.com/veedrin/horseshoe博客地址(文章排版真的很漂亮)&#xff1a;https://veedrin.com如果覺得對你有幫助&#xff0c;歡迎來GitHub點Star或者來我的博客親口告…

dbeaver導出表結構和數據_mall數據庫表結構概覽

mall是一套電商系統&#xff0c;后臺系統主要包括商品管理、訂單管理、營銷管理(運營管理促銷管理)、內容管理、用戶管理等模塊&#xff0c;本文主要對這些模塊的數據庫表結構及功能做大概的介紹。商品管理數據庫表結構功能結構訂單管理數據庫表結構功能結構營銷管理數據庫表結…

成為項目經理需要具備什么條件?

優秀的項目經理不問出生&#xff0c;項目經理沒有硬性條件&#xff0c;個人意愿是關鍵&#xff0c;愿意堅持做下去&#xff0c;不停學習項目管理知識&#xff0c;從0到1&#xff0c;從廣到深&#xff0c;平時刻意練習&#xff0c;不怕出錯。

arima模型 p q d 確定_自回歸移動平均模型(ARMA)

自回歸模型&#xff08;AR&#xff09;&#xff1a;①描述當前值和歷史值之間的關系&#xff0c;用變量自身的歷史時間數據對自身進行預測。②自回歸模型必須滿足平穩性的要求。③移動平均模型&#xff08;MA&#xff09;關注的是自回歸模型中的誤差項的累加。移動平均法能有效…

禪道組成

禪道是PHPmysqlapache的組合&#xff0c;如果通過禪道源代碼安裝部署&#xff0c;則要安裝php環境&#xff0c;mysql等配套的運行環境。 禪道提供了Windows環境下的集成安裝包&#xff0c;該安裝包適合新安裝。 禪道Windows集成包由集成工具禪道源代碼組成&#xff0c;升級的…

Mysql閃回工具之binlog2sql的原理及其使用

生產上誤刪數據、誤改數據的現象也是時常發生的現象&#xff0c;作為運維這時候就需要出來補鍋了&#xff0c;最開始的做法是恢復備份&#xff0c;然后從中找到需要的數據再進行修復&#xff0c;但是這個時間太長了&#xff0c;對于大表少數數據的修復來講&#xff0c;動作太大…

禪道11.0windows本機安裝

為了驗證禪道的某個功能&#xff0c;需要用到生產上的數據&#xff0c;又不能在生產上進行。只能在本地搭建一套禪道&#xff0c;還原生產的數據到本地。 1.下載禪道 生產上用的是禪道11.0&#xff0c;數據庫是11.0版本的數據庫&#xff0c;為了更好兼容&#xff0c;下載禪道…

createtrackbar函數_【3】OpenCV圖像處理模塊(10)inRange函數實現閾值化,HSV圖像分割...

本節使用inRange函數來實現閾值化。跟前面的閾值化方法一樣&#xff0c;只不過在實現時用閾值范圍來替代固定閾值。本節還提供了一種物體檢測的手段&#xff0c;用基于像素值范圍的方法&#xff0c;在HSV色彩空間檢測物體。HSV色彩空間HSV&#xff08;hue&#xff0c;saturatio…

PPT取消自動播放

選中PPT頁面&#xff0c;點擊“切換”&#xff0c;檢查下“設置自動換片時間”&#xff0c;如果勾選了&#xff0c;則去掉。

軟件研發成本估算過程之估算軟件規模概述

通常情況下&#xff0c;規模估算是軟件成本估算過程的起點。估算規模是后續計算軟件項目的工作量、成本和進度的主要輸入&#xff0c;是項目范圍管理的關鍵&#xff0c;因此&#xff0c;在條件允許的情況下&#xff0c;應進行規模估算。在規模估算過程中&#xff0c;需要注意以…

自動駕駛芯片_盤點全球自動駕駛芯片“戰場”參與者

據了解&#xff0c;目前出貨量最大的駕駛輔助芯片廠商Mobileye、Nvidia形成“雙雄爭霸”局面&#xff0c;Xilinx則在FPGA的路線上進軍&#xff0c;Google、地平線、寒武紀向專用領域AI芯片發力&#xff0c;國內四維圖新、全志科技、森國科(國科微)在自動駕駛芯片領域積極布局。…

word文檔頁碼不連續怎么弄

頁碼不連續是因為在不連續頁碼的兩頁之間有分隔符。 第一步&#xff1a;搜索分節符 第二步&#xff1a;看頁碼與頁面是否一致 wps的左下角 如果不一致&#xff0c;則第三步 第三步&#xff1a;設置頁碼&#xff1a;“繼續上一頁編碼”

看完動畫你還敢說不會 快速排序

前言 由于LeetCode上的算法題很多涉及到一些基礎的數據結構&#xff0c;為了更好的理解后續更新的一些復雜題目的動畫&#xff0c;推出一個新系列 -----《圖解數據結構》&#xff0c;主要使用動畫來描述常見的數據結構和算法。本系列包括十大排序、堆、隊列、樹、并查集、圖等等…

java多張圖片合成一張_1分鐘學會“全景照片”拍攝技巧,從單反拍攝到PS合成,收藏備用...

作為一名攝影愛好者&#xff0c;您知道如何才能快速拍出一張全景照片&#xff0c;同時保證高畫質和照片不畸變&#xff1f;比如下面的2張圖片&#xff1a;要想得到這樣的全景照片&#xff0c;千萬不要通過后期裁剪&#xff0c;否則清晰度肯定會大打折扣&#xff01;其實&#x…

Chrome查看cookie

不同版本的Chrome查看cookie的入口位置不同&#xff0c;這里介紹個通用的方法。 1.進入設置頁 2.搜索cookie 3.進入“cookie....”&#xff0c;選擇“查看所有......”

console 速查手冊

// 用于輸出一個 js 對象列表* console.log(obj1 [, obj2, ..., objN); // // 一個 js 字符串&#xff0c;其中包含0或多個不同類型的替代字符串 // console.log(String: %s, Int: %d,Float: %f, Object: %o, str, ints, // floats, obj) // // 也支持模板字符串 // console.lo…

nginx 帶寬_Nginx的Gzip功能

程序員自由之路 | 作者urlify.cn/eyuUVr | 來源什么是HTTP壓縮有時候客戶端和服務器之間會傳輸比較大的報文數據&#xff0c;這時候就占用較大的網絡帶寬和時長。為了節省帶寬&#xff0c;加速報文的響應速速&#xff0c;可以將傳輸的報文數據先進行壓縮&#xff0c;然后再進行…

分享朋友圈QQ空間需要哪些參數

shareTitle(分享標題 &#xff0c; shareDes(分享描述 &#xff0c; shareImg(分享圖片地址&#xff0c; shareUrl(分享地址&#xff0c; shareType(分享類型&#xff0c;微信朋友&#xff1a;WEIXIN、微信朋友圈&#xff1a;WEIXIN_CIRCLE、QQ&#xff1a;QQ)

【今日頭條】【抖音火山】前端開發實習生

今日頭條成立于2012年&#xff0c;致力于成為最懂你的信息平臺&#xff0c;連接人與信息&#xff0c;促進內容的創作和交流。通過技術&#xff0c;來改變整個內容生產、消費領域。 5年的時間內&#xff0c;我們已經成為了一個估值過百億美元&#xff0c;用戶數億&#xff0c;DA…

程序員真的是吃青春飯的嗎?(獻給即將進入職場的程序員們)

又有學生問我&#xff1a;程序員真的是吃青春飯的嗎&#xff1f;我是不是做到三十歲就該考慮轉型了&#xff1f; 我告訴他們&#xff1a; 這是中國的記者們用統計數字造下的一個彌天大謊&#xff0c;當我們看到微軟集團內的許多白發程序員在兢兢業業地工作的時候&#xff0c;我…