Docker - пример связывание трех контейнеров на примере Python приложения, nginx, redis
Материал из Wiki - Iphoster - the best ever hosting and support. 2005 - 2024
Docker - пример связывание трех контейнеров на примере Python приложения, nginx, redis
В примере - py приложение (1 контейнер) работающее с redis (1 контейнер) и доступное через nginx (1 контейнер). Всех их нужно связать.
# vi /root/Dockerfile FROM python:2.7 RUN mkdir -p /code COPY . /code VOLUME [ "/code" ] WORKDIR /code RUN pip install -r requirements.txt EXPOSE 5000 CMD [ "python", "/code/app.py" ]
FROM - название образа, взятого за основу RUN - запустить команду в контейнере COPY - скопировать файлы с одного места в другое VOLUME - какие директории мы подключаем WORKDIR - рабочая директория EXPOSE - 5000 порт CMD - запуск команды
# vi /root/app.py: from flask import Flask from redis import Redis import os app = Flask(__name__) redis = Redis(host='redis', port=6379) @app.route('/') def hello(): redis.incr('hits') return 'Hello World! I have been seen %s times.' % redis.get('hits') if __name__ == "__main__": app.run(host="0.0.0.0", debug=True)
# vi requirements.txt flask redis
Собираем первый образ и запускам контейнер с эти образом:
# docker build -t flaskapp /root/ # docker run -d -P --name flaskapp flaskapp
Наш первый контейнер
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 377a255e8a1f flaskapp "python /code/app.py" 5 seconds ago Up 4 seconds 0.0.0.0:32770->5000/tcp flaskapp
Теперь подключаем контейнер с redis к контейнеру с py приложением.
# docker rm -f flaskapp flaskapp # docker run -d --name redis redis # docker run -d -P --name flaskapp --link redis:redis flaskapp # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2942e75a05d6 flaskapp "python /code/app.py" 42 seconds ago Up 41 seconds 0.0.0.0:32771->5000/tcp flaskapp b3daf6504f4f redis "docker-entrypoint..." 48 seconds ago Up 47 seconds 6379/tcp redis
Теперь создаем докер файл
# :> /root/Dockerfile # vi /root/Dockerfile FROM nginx:1.7.8 COPY flaskapp.conf /etc/nginx/conf.d/default.conf
# vi flaskapp.conf server { listen 80; location / { proxy_pass http://flaskapp:5000; } }
Собираем образ с нашим кастомным конфигом nginx:
# docker build -t nginx-flask /root/ # docker run --name nginx-flask --link flaskapp:flaskapp -d -p 8080:80 nginx-flask
Наши все контейнеры:
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 534ce3cfe883 nginx-flask "nginx -g 'daemon ..." 2 minutes ago Up 2 minutes 443/tcp, 0.0.0.0:8080->80/tcp nginx-flask 2942e75a05d6 flaskapp "python /code/app.py" 18 minutes ago Up 18 minutes 0.0.0.0:32771->5000/tcp flaskapp b3daf6504f4f redis "docker-entrypoint..." 18 minutes ago Up 18 minutes 6379/tcp redis
Проверяем как работает эта схема:
# curl ip:8080 Hello World! I have been seen 1 times.