From b53e4542c983b4939b43f7e81631d5e8740496b1 Mon Sep 17 00:00:00 2001 From: Milas Bowman Date: Fri, 8 Jul 2022 10:48:08 -0400 Subject: [PATCH] flask-redis: dev envs support & misc improvements (#265) (Most of this is almost identical to #263.) * Docker Desktop Development Environments config * Use cache volumes for pip * Downgrade from Python 3.11 _alpha_ -> Python 3.10 * Use port `8000` to avoid conflicts with Airplay on macOS for default Flask port `5000` * Use `SIGINT` to gracefully stop Flask * Formatting fixes in `compose.yaml` Signed-off-by: Milas Bowman --- flask-redis/.docker/docker-compose.yaml | 16 ++++++++++++++ flask-redis/Dockerfile | 27 ++++++++++++++++++++--- flask-redis/README.md | 19 ++++++++++++---- flask-redis/app.py | 2 +- flask-redis/compose.yaml | 29 +++++++++++++++---------- 5 files changed, 73 insertions(+), 20 deletions(-) create mode 100644 flask-redis/.docker/docker-compose.yaml diff --git a/flask-redis/.docker/docker-compose.yaml b/flask-redis/.docker/docker-compose.yaml new file mode 100644 index 0000000..a687434 --- /dev/null +++ b/flask-redis/.docker/docker-compose.yaml @@ -0,0 +1,16 @@ +services: + redis: + image: redislabs/redismod + ports: + - '6379:6379' + web: + build: + context: . + target: dev-envs + stop_signal: SIGINT + ports: + - '8000:8000' + volumes: + - /var/run/docker.sock:/var/run/docker.sock + depends_on: + - redis diff --git a/flask-redis/Dockerfile b/flask-redis/Dockerfile index 856d946..046e76c 100644 --- a/flask-redis/Dockerfile +++ b/flask-redis/Dockerfile @@ -1,6 +1,27 @@ -FROM python:3.11.0a6-alpine3.15 +# syntax=docker/dockerfile:1.4 +FROM --platform=$BUILDPLATFORM python:3.10-alpine AS builder + WORKDIR /code + COPY requirements.txt /code -RUN pip install -r requirements.txt --no-cache-dir +RUN --mount=type=cache,target=/root/.cache/pip \ + pip3 install -r requirements.txt + COPY . /code -CMD python app.py + +ENTRYPOINT ["python3"] +CMD ["app.py"] + +FROM builder as dev-envs + +RUN <6379/tcp -flask-redis-web-1 "/bin/sh -c 'python …" web running 0.0.0.0:5000->5000/tcp +flask-redis-web-1 "/bin/sh -c 'python …" web running 0.0.0.0:8000->8000/tcp ``` -After the application starts, navigate to `http://localhost:5000` in your web browser or run: +After the application starts, navigate to `http://localhost:8000` in your web browser or run: ``` -$ curl localhost:5000 +$ curl localhost:8000 This webpage has been viewed 2 time(s) ``` @@ -80,3 +80,14 @@ Stop and remove the containers ``` $ docker compose down ``` + +## Use with Docker Development Environments + +You can use this sample with the Dev Environments feature of Docker Desktop. + +![Screenshot of creating a Dev Environment in Docker Desktop](../dev-envs.png) + +To develop directly on the services inside containers, use the HTTPS Git url of the sample: +``` +https://github.com/docker/awesome-compose/tree/master/flask-redis +``` diff --git a/flask-redis/app.py b/flask-redis/app.py index 873a3cf..bd4f916 100644 --- a/flask-redis/app.py +++ b/flask-redis/app.py @@ -11,4 +11,4 @@ def hello(): return "This webpage has been viewed "+counter+" time(s)" if __name__ == "__main__": - app.run(host="0.0.0.0", debug=True) + app.run(host="0.0.0.0", port=8000, debug=True) diff --git a/flask-redis/compose.yaml b/flask-redis/compose.yaml index 4029e17..0a7e60c 100644 --- a/flask-redis/compose.yaml +++ b/flask-redis/compose.yaml @@ -1,13 +1,18 @@ services: - redis: - image: redislabs/redismod - ports: - - '6379:6379' - web: - build: . - ports: - - "5000:5000" - volumes: - - .:/code - depends_on: - - redis + redis: + image: redislabs/redismod + ports: + - '6379:6379' + web: + build: + context: . + target: builder + # flask requires SIGINT to stop gracefully + # (default stop signal from Compose is SIGTERM) + stop_signal: SIGINT + ports: + - '8000:8000' + volumes: + - .:/code + depends_on: + - redis