This is a documentation explaing dockerization of an api caching project in python. This project is designed with an nginx proxy loadbalancer to loadbalance the traffic among api containers and a Redis cache container for api caching. All the communications between the containers are through a bridge network inside the host server.
I used ipstack API in this python application as a demo. This API will show you the Geolocation of IP addresses.
- IP-Location finding website (Python) (Just a demonstration)
- Easy to migrate everywhere
- Container load balanced (Nginx)
- All containers are spin up with a single command
- 5 Containers for LAMP (IP-Stack, Redis, Nginx(Load Balancer))
- 1 Network (For Container interconnecting)
- Need to install docker and docker-compose
- You have a basic knowledge of what is docker.
- You have a basic knowledge of what is ipstack and how it's working
- Need an IP stack Login and API for location finding
- Need to add apikey file before running the script. So, please find the IP stack URL and grab the key and change the same on "env.dev"
Please refer the doc for docker installation
yum install docker -y yum install git -yPlease refer the doc for docker-compose installation
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose sudo chmod +x /usr/bin/docker-compose docker-compose version you guys can use play with Docker which includes pre-installed docker and compose. It looks like a terminal and it's built from alpine OS. So, it's just used for learning purpose so who you guys can use 4hrs session without any additional installation.
Please go through the ipstack and click "GET FREE API KEY" on the top right corner.
- Clone application from GitHub
git clone https://github.com/dilshadkp/api-caching-with-nginx-proxy.git cd api-caching-with-nginx-proxy- Add your API KEY in env.txt
vim env.txtIPSTACK_KEY="enter-your-key-here(without any double quotes)"- Execute the docker-compose.yml
docker-compose --env-file env.txt up -d$ docker-compose --env-file env.txt up -d Pulling nginx (nginx:alpine)... alpine: Pulling from library/nginx 97518928ae5f: Pull complete a4e156412037: Pull complete e0bae2ade5ec: Pull complete 3f3577460f48: Pull complete e362c27513c3: Pull complete a2402c2da473: Pull complete Digest: sha256:12aa12ec4a8ca049537dd486044b966b0ba6cd8890c4c900ccb5e7e630e03df0 Status: Downloaded newer image for nginx:alpine Pulling redis (redis:latest)... latest: Pulling from library/redis eff15d958d66: Pull complete 1aca8391092b: Pull complete 06e460b3ba1b: Pull complete def49df025c0: Pull complete 646c72a19e83: Pull complete db2c789841df: Pull complete Digest: sha256:619af14d3a95c30759a1978da1b2ce375504f1af70ff9eea2a8e35febc45d747 Status: Downloaded newer image for redis:latest Pulling ipstack1 (dilshadkp/ipstack:v1)... v1: Pulling from dilshadkp/ipstack 921b31ab772b: Pull complete 1a0c422ed526: Pull complete ec0818a7bbe4: Pull complete b53197ee35ff: Pull complete 8b25717b4dbf: Pull complete 2352f0e22307: Pull complete 0148c4900674: Pull complete f2b28ffe4f9b: Pull complete c5b6db6af2f3: Pull complete Digest: sha256:db19eb2d4030d4fb34bcc9e385d9153646a6ed8d468fe4b60fcbe20a64fe65cd Status: Downloaded newer image for dilshadkp/ipstack:v1 Creating ipstack3 ... done Creating redis ... done Creating ipstack1 ... done Creating ipstack2 ... done Creating nginx ... done$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3000ec757706 nginx:alpine "/docker-entrypoint.…" 6 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp nginx 2572923cba63 dilshadkp/ipstack:v1 "python3 app.py" 6 minutes ago Up 5 minutes ipstack2 1bd7fa355204 dilshadkp/ipstack:v1 "python3 app.py" 6 minutes ago Up 6 minutes ipstack3 f59f3a48d583 redis:latest "docker-entrypoint.s…" 6 minutes ago Up 5 minutes 6379/tcp redis cf995a8acbc1 dilshadkp/ipstack:v1 "python3 app.py" 6 minutes ago Up 6 minutes ipstack1ck1x------------------x---------------------x---------------------x-------------------x--------------------x---------------------x-------------------x


