docker install,【Docker系列】Docker Compose 環境變量

 2023-10-05 阅读 28 评论 0

摘要:準備 app.py from flask import Flask from redis import StrictRedis import os import socketapp = Flask(__name__) redis = StrictRedis(host=os.environ.get('REDIS_HOST', '127.0.0.1'),port=6379, password=os.environ.get('R

準備

在這里插入圖片描述
app.py

from flask import Flask
from redis import StrictRedis
import os
import socketapp = Flask(__name__)
redis = StrictRedis(host=os.environ.get('REDIS_HOST', '127.0.0.1'),port=6379, password=os.environ.get('REDIS_PASS')) # 從環境變量讀密碼@app.route('/')
def hello():redis.incr('hits')return f"Hello Container World! I have been seen {redis.get('hits').decode('utf-8')} times and my hostname is {socket.gethostname()}.\n"

Dockerfile

FROM python:3.9.5-slimRUN pip install flask redis && \groupadd -r flask && useradd -r -g flask flask && \mkdir /src && \chown -R flask:flask /srcUSER flaskCOPY app.py /src/app.pyWORKDIR /srcENV FLASK=app.py REDIS_HOST=redisEXPOSE 5000CMD ["flask", "run", "-h", "0.0.0.0"]

nginx.conf

server {listen  80 default_server;location / {proxy_pass http://flask:5000;}
}

docker install?docker-compose.yml
environment 環境變量參數

version: "3.8"services:flask:build:context: ./flaskdockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOST=redis-server- REDIS_PASS=abc123 # app.py 讀取密碼networks:- backend- frontendredis-server:image: redis:latestcommand: redis-server --requirepass abc123networks:- backendnginx:image: nginx:stable-alpineports:- 8000:80depends_on:- flaskvolumes:- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro- ./var/log/nginx:/var/log/nginxnetworks:- frontendnetworks:backend:frontend:

執行

執行步驟:

  1. build構建
  2. up -d 后臺啟動
  3. ps 查看
PS C:\Users\柏杉\Downloads\compose-env> docker-compose build
redis-server uses an image, skipping
nginx uses an image, skipping
Building flask
Sending build context to Docker daemon  3.072kB
Step 1/8 : FROM python:3.9.5-slim---> c71955050276
Step 2/8 : RUN pip install flask redis &&     groupadd -r flask && useradd -r -g flask flask &&     mkdir /src &&     chown -R flask:flask /src---> Using cache---> cbe62d2158d1
Step 3/8 : USER flask---> Using cache---> 6f59861a4345
Step 4/8 : COPY app.py /src/app.py---> Using cache---> 11fe82f12b2b
Step 5/8 : WORKDIR /src---> Using cache---> f7b7dce07bf7
Step 6/8 : ENV FLASK=app.py REDIS_HOST=redis---> Using cache---> 8457b24cf78f
Step 7/8 : EXPOSE 5000---> Using cache---> 960825bd910b
Step 8/8 : CMD ["flask", "run", "-h", "0.0.0.0"]---> Using cache---> f19971896f07
Successfully built f19971896f07
Successfully tagged flask-demo:latest
SECURITY WARNING: You are building a Docker image from Windows against a non-Windows Docker host. All files and directories added to build context will have '-rwxr-xr-x' permissions. It is recommended to double check and reset permissions for sensitive files and directories.Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
PS C:\Users\柏杉\Downloads\compose-env> docker-compose up -d
Creating network "compose-env_backend" with the default driver
Creating network "compose-env_frontend" with the default driver
Creating compose-env_flask_1        ... done
Creating compose-env_redis-server_1 ... done
Creating compose-env_nginx_1        ... done
PS C:\Users\柏杉\Downloads\compose-env> docker-compose psName                         Command               State          Ports
------------------------------------------------------------------------------------------
compose-env_flask_1          flask run -h 0.0.0.0             Up      5000/tcp
compose-env_nginx_1          /docker-entrypoint.sh ngin ...   Up      0.0.0.0:8000->80/tcp
compose-env_redis-server_1   docker-entrypoint.sh redis ...   Up      6379/tcp
PS C:\Users\柏杉\Downloads\compose-env>

瀏覽器訪問:http://127.0.0.1:8000/ 查看啟動成功!

使用環境變量

把密碼 abc123 改成${REDIS_PASSWORD}

docker環境變量?別人無法根docker-compose.yml看到密碼,據提高了安全性。在構建時才把密碼放進去!

version: "3.8"services:flask:build:context: ./flaskdockerfile: Dockerfileimage: flask-demo:latestenvironment:- REDIS_HOST=redis-server- REDIS_PASS=${REDIS_PASSWORD}networks:- backend- frontendredis-server:image: redis:latestcommand: redis-server --requirepass ${REDIS_PASSWORD}networks:- backendnginx:image: nginx:stable-alpineports:- 8000:80depends_on:- flaskvolumes:- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro- ./var/log/nginx:/var/log/nginxnetworks:- frontendnetworks:backend:frontend:

創建 .env 管理環境變量

docker-compose.yml出現環境變量時,會自動找.env文件

REDIS_PASSWORD=ABC123

使用git管理,創建.gitignore,管理上傳文件

.env

配置文件預覽 docker-compose config

提前預覽一下,查看設置的有沒有問題

PS C:\Users\柏杉\Downloads\compose-env> docker-compose config
networks:backend: {}frontend: {}
services:flask:build:context: C:\Users\柏杉\Downloads\compose-env\flaskdockerfile: Dockerfileenvironment:REDIS_HOST: redis-serverREDIS_PASS: abc123image: flask-demo:latestnetworks:backend: nullfrontend: nullnginx:depends_on:flask:condition: service_startedimage: nginx:stable-alpinenetworks:frontend: nullports:- published: 8000target: 80volumes:- C:\Users\柏杉\Downloads\compose-env\nginx\nginx.conf:/etc/nginx/conf.d/default.conf:ro- C:\Users\柏杉\Downloads\compose-env\var\log\nginx:/var/log/nginx:rwredis-server:command: redis-server --requirepass abc123image: redis:latestnetworks:backend: null
version: '3.8'

若要沒有設置.env文件
出現提示:REDIS_PASSWORD沒有設置,默認為空的字符串。

WARNING: The REDIS_PASSWORD variable is not set. Defaulting to a blank string.

自定義環境變量文件名

docker環境,默認是.env

創建自定義的文件 myenv

REDIS_PASSWORD=ABC123

--env-file 參數

查看

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

docker內安裝docker?啟動

docker-compose --env-file .\myenv up -d

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/121385.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息