flask文件

app.py

  1. from flask import Flask
  2. from redis import StrictRedis
  3. import os
  4. import socket
  5. app = Flask(__name__)
  6. redis = StrictRedis(host=os.environ.get('REDIS_HOST', '127.0.0.1'),
  7. port=6379, password=os.environ.get("REDIS_PASS"))
  8. @app.route('/')
  9. def hello():
  10. redis.incr('hits')
  11. return f"Hello Container World! I have been seen {redis.get('hits').decode('utf-8')} times and my hostname is {socket.gethostname()}.\n"

Dockerfile

  1. FROM python:3.9.5-slim
  2. RUN pip install flask redis && \
  3. groupadd -r flask && useradd -r -g flask flask && \
  4. mkdir /src && \
  5. chown -R flask:flask /src
  6. USER flask
  7. COPY app.py /src/app.py
  8. WORKDIR /src
  9. ENV FLASK=app.py REDIS_HOST=redis
  10. EXPOSE 5000
  11. CMD ["flask", "run", "-h", "0.0.0.0"]

nginx

nginx.conf

  1. server {
  2. listen 80 default_server;
  3. location / {
  4. proxy_pass http://flask:5000;
  5. }
  6. }

.dockerignore

  1. .DS_Store
  2. .idea
  3. .git
  4. .gitignore
  5. .env
  6. .dockerignore
  7. Dockerfile
  8. docker-compose.yaml
  9. nginx.conf
  10. var

docker-compose.yml

  1. version: "3.8"
  2. services:
  3. flask:
  4. build: # 构建 属于自己的 flask程序
  5. context: ./flask # 到那个文件夹下面构建
  6. dockerfile: Dockerfile # 读取 dockerfile 的名字叫: Dockerfile
  7. image: flask-demo:latest # 这里起到命名的作用
  8. environment: # 设置环境变量
  9. - REDIS_HOST=redis-server
  10. - REDIS_PASS=${REDIS_PASSWORD}
  11. healthcheck:
  12. test: ["CMD", "curl", "-f", "http://localhost:5000"]
  13. interval: 30s
  14. timeout: 3s
  15. retries: 3
  16. start_period: 40s
  17. depends_on:
  18. redis-server:
  19. condition: service_healthy
  20. networks: # 连接网络为 backend frontend
  21. - backend
  22. - frontend
  23. redis-server:
  24. image: redis:latest # 拉取 redis:latest
  25. command: redis-server --requirepass ${REDIS_PASSWORD}
  26. healthcheck:
  27. test: ["CMD", "redis-cli", "ping"]
  28. interval: 1s
  29. timeout: 3s
  30. retries: 30
  31. networks: # 连接网络为 backend
  32. - backend
  33. nginx:
  34. image: nginx:stable-alpine # 拉取 nginx
  35. ports: # 将 80端口 映射 为 8000端口
  36. - 8000:80
  37. depends_on: # depends_on 启动顺序 只要 flask先启动后 此程序才能启动
  38. flask:
  39. condition: service_healthy
  40. volumes:
  41. - C:\Users\CZC\Desktop\docker_project\M-docker-compose-scale-new\nginx\nginx.conf:/etc/nginx/conf.d/default.conf:ro
  42. - C:\Users\CZC\Desktop\docker_project\M-docker-compose-scale-new\var\log\nginx:/var/log/nginx # /var/log/nginx
  43. # - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro # 将 /etc/nginx/conf.d/default.conf 映射 到 ./nginx/nginx.conf ro:readonly只读 rw:读写
  44. # - ./var/log/nginx:/var/log/nginx # /var/log/nginx 映射 到 ./var/log/nginx 上
  45. networks: # 连接网络为 frontend
  46. - frontend
  47. networks:
  48. backend:
  49. frontend:

.env

  1. REDIS_PASSWORD=56248123

验证替换的效果

  1. docker-compose config

如果 .env 改名字 可以指定名字

比如改成 myenv

  1. docker-compose --env-file .\myenv config