You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Milas Bowman b53e4542c9
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 <milas.bowman@docker.com>
3 years ago
..
.docker flask-redis: dev envs support & misc improvements (#265) 3 years ago
Dockerfile flask-redis: dev envs support & misc improvements (#265) 3 years ago
README.md flask-redis: dev envs support & misc improvements (#265) 3 years ago
app.py flask-redis: dev envs support & misc improvements (#265) 3 years ago
compose.yaml flask-redis: dev envs support & misc improvements (#265) 3 years ago
requirements.txt

README.md

Compose sample application

Python/Flask application using a Redis database

Project structure:

.
├── Dockerfile
├── README.md
├── app.py
├── compose.yaml
└── requirements.txt

compose.yaml

services:
   redis: 
     image: redislabs/redismod
     ports:
       - '6379:6379' 
   web:
        build: .
        ports:
            - "8000:8000"
        volumes:
            - .:/code
        depends_on:
            - redis

Deploy with docker compose

$ docker compose up -d
[+] Running 24/24
 ⠿ redis Pulled   
 ...                                                                                                                                                                                                                                                                                                                                                                                                             
   ⠿ 565225d89260 Pull complete                                                                                                                                                                                                      
[+] Building 12.7s (10/10) FINISHED
 => [internal] load build definition from Dockerfile                                                                                                                                                                                  ...
[+] Running 3/3
 ⠿ Network flask-redis_default    Created                                                                                                                                                                                             
 ⠿ Container flask-redis-redis-1  Started                                                                                                                                                                                             
 ⠿ Container flask-redis-web-1    Started

Expected result

Listing containers must show one container running and the port mapping as below:


$ docker compose ps
NAME                  COMMAND                  SERVICE             STATUS              PORTS
flask-redis-redis-1   "redis-server --load…"   redis               running             0.0.0.0:6379->6379/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:8000 in your web browser or run:

$ curl localhost:8000
This webpage has been viewed 2 time(s)

Monitoring Redis keys

Connect to redis database by using redis-cli command and monitor the keys.

redis-cli -p 6379
127.0.0.1:6379> monitor
OK
1646634062.732496 [0 172.21.0.3:33106] "INCRBY" "hits" "1"
1646634062.735669 [0 172.21.0.3:33106] "GET" "hits"

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

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