Compose初體驗
目錄
1.3 在專案中建立一個名為 app.py 的檔案,內容如下
1.4 在專案目錄中建立另一個名為 requirements.txt 的檔案
3.1 在專案目錄中建立一個名為docker-compose.yml 的檔案
4.1 執行 docker-compose up 指令來啟動應用程式
4.2 本地訪問 curl http//localhost:5000/ 以檢視應用程式是否正常執行
如下將構建一個執行在Docker Compose上的簡單Python Web應用程式;該應用程式使用Flask框架,並在Redis中維護一個計數器
前提條件
確保已經安裝了Docker Engine 和Docker Compose。您無需安裝Python或Redis,因為兩者均由Docker映像提供。
定義應用程式依賴項
1、設定
1.1 準備工作
# yum -y install pyhton-pip //pip 是python 包管理工具
# yum -y install epel-release //報錯執行
1.2 為專案建立目錄
# mkdir composetest
# cd composetest
1.3 在專案中建立一個名為 app.py 的檔案,內容如下
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
在此示例中,redis是應用程式網路上的redis容器的主機名。為Redis使用預設埠6379
1.4 在專案目錄中建立另一個名為 requirements.txt 的檔案
flask
redis
2、建立
編寫一個構建Docker映像的Dockerfile。該影像包含Python應用程式所需的所有依賴關係,包括Python本身
2.1 建立一個名為 Dockerfile 的檔案
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
過程說明:
- 從Python 3.7映像開始構建映像。
- 將工作目錄設定為/code。
- 設定flask命令使用的環境變數。
- 安裝gcc和其他依賴項
- 複製requirements.txt並安裝Python依賴項。
- 向影像新增後設資料以描述容器正在偵聽埠5000
- 將.專案中的當前目錄複製到.映像中的工作目錄。
- 將容器的預設命令設定為flask run。
3、在撰寫檔案中定義服務
3.1 在專案目錄中建立一個名為docker-compose.yml 的檔案
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
該Compose檔案定義了兩個服務:web和redis
3.2 網路服務
該web服務使用從Dockerfile當前目錄中構建的映像。然後,它將容器和主機繫結到暴露的埠5000。此示例服務使用Flask Web伺服器的預設埠5000。
4、生成和執行寫好的程式
4.1 執行 docker-compose up 指令來啟動應用程式
# docker-compose up
Starting composetest_redis_1 ... done
Starting composetest_web_1 ... done
Attaching to composetest_web_1, composetest_redis_1
redis_1 | 1:C 28 Oct 2020 10:22:35.396 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
redis_1 | 1:C 28 Oct 2020 10:22:35.396 # Redis version=6.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
redis_1 | 1:C 28 Oct 2020 10:22:35.396 # 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 28 Oct 2020 10:22:35.403 * Running mode=standalone, port=6379.
redis_1 | 1:M 28 Oct 2020 10:22:35.403 # 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 28 Oct 2020 10:22:35.403 # Server initialized
redis_1 | 1:M 28 Oct 2020 10:22:35.403 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
redis_1 | 1:M 28 Oct 2020 10:22:35.403 # 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 madvise > /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 (set to 'madvise' or 'never').
redis_1 | 1:M 28 Oct 2020 10:22:35.403 * Loading RDB produced by version 6.0.9
redis_1 | 1:M 28 Oct 2020 10:22:35.403 * RDB age 15 seconds
redis_1 | 1:M 28 Oct 2020 10:22:35.403 * RDB memory usage when created 0.79 Mb
redis_1 | 1:M 28 Oct 2020 10:22:35.404 * DB loaded from disk: 0.000 seconds
redis_1 | 1:M 28 Oct 2020 10:22:35.404 * Ready to accept connections
web_1 | * Serving Flask app "app.py"
web_1 | * Environment: production
web_1 | WARNING: This is a development server. Do not use it in a production deployment.
web_1 | Use a production WSGI server instead.
web_1 | * Debug mode: off
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
4.2 本地訪問 curl http//localhost:5000/ 以檢視應用程式是否正常執行
成功之後會看到前面python編寫的app.py檔案;每重新整理一次 列印 數字遞增的字串
# curl http://0.0.0.0:5000/
Hello World! I have been seen 4 times.
相關文章
- Electron初體驗
- vscode初體驗VSCode
- SpringMVC初體驗SpringMVC
- ollama 初體驗
- laravel初體驗Laravel
- golang 初體驗Golang
- AQS初體驗AQS
- krpano初體驗
- Angular 初體驗Angular
- outline初體驗
- Selenium 初體驗
- Loki 初體驗Loki
- gRPC初體驗RPC
- ReactNative初體驗React
- OpenCV 初體驗OpenCV
- http初體驗HTTP
- Prettier初體驗
- wepy初體驗
- Flutter初體驗Flutter
- Nuxt 初體驗UX
- jQuery初體驗jQuery
- indexedDB 初體驗Index
- web assembly 初體驗Web
- Argo CD初體驗Go
- .Net Aspire初體驗
- Laravel Octane 初體驗Laravel
- go modules 初體驗Go
- 10、Swoole 初體驗
- Kali Nethunter初體驗
- Kubernetes--初體驗
- Mybatis初體驗(二)MyBatis
- Vue 初體驗(上)Vue
- Python初體驗——列表Python
- Github codespaces 初體驗Github
- react hooks初體驗ReactHook
- React Native 初體驗React Native
- Shiro-初體驗
- html初體驗#2HTML