600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【Docker系列】Docker Compose 环境变量

【Docker系列】Docker Compose 环境变量

时间:2022-04-26 00:19:04

相关推荐

【Docker系列】Docker Compose 环境变量

准备

app.py

from flask import Flaskfrom redis import StrictRedisimport osimport 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-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:

执行

执行步骤:

build构建up -d 后台启动ps 查看

PS C:\Users\柏杉\Downloads\compose-env> docker-compose buildredis-server uses an image, skippingnginx uses an image, skippingBuilding flaskSending build context to Docker daemon 3.072kBStep 1/8 : FROM python:3.9.5-slim---> c71955050276Step 2/8 : RUN pip install flask redis &&groupadd -r flask && useradd -r -g flask flask &&mkdir /src &&chown -R flask:flask /src---> Using cache---> cbe62d2158d1Step 3/8 : USER flask---> Using cache---> 6f59861a4345Step 4/8 : COPY app.py /src/app.py---> Using cache---> 11fe82f12b2bStep 5/8 : WORKDIR /src---> Using cache---> f7b7dce07bf7Step 6/8 : ENV FLASK=app.py REDIS_HOST=redis---> Using cache---> 8457b24cf78fStep 7/8 : EXPOSE 5000---> Using cache---> 960825bd910bStep 8/8 : CMD ["flask", "run", "-h", "0.0.0.0"]---> Using cache---> f19971896f07Successfully built f19971896f07Successfully tagged flask-demo:latestSECURITY 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 themPS C:\Users\柏杉\Downloads\compose-env> docker-compose up -dCreating network "compose-env_backend" with the default driverCreating network "compose-env_frontend" with the default driverCreating compose-env_flask_1 ... doneCreating compose-env_redis-server_1 ... doneCreating compose-env_nginx_1 ... donePS C:\Users\柏杉\Downloads\compose-env> docker-compose psNameCommandStatePorts------------------------------------------------------------------------------------------compose-env_flask_1flask run -h 0.0.0.0 Up5000/tcpcompose-env_nginx_1/docker-entrypoint.sh ngin ... Up0.0.0.0:8000->80/tcpcompose-env_redis-server_1 docker-entrypoint.sh redis ... Up6379/tcpPS C:\Users\柏杉\Downloads\compose-env>

浏览器访问:http://127.0.0.1:8000/查看启动成功!

使用环境变量

把密码abc123改成${REDIS_PASSWORD}

别人无法根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 confignetworks: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: nullversion: '3.8'

若要没有设置.env文件

出现提示:REDIS_PASSWORD没有设置,默认为空的字符串。

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

自定义环境变量文件名

默认是.env

创建自定义的文件myenv

REDIS_PASSWORD=ABC123

--env-file参数

查看

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

启动

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。