У цій статті ми покажемо, як створити найпростіший мікросервіс на Fastapi Python Framework і запустити його в контейнер Docker. Спочатку подумайте, як завантажити та запустити готовий контейнер та основні команди для управління контейнером у Docker, а потім перейдіть до створення нашого зображення за допомогою Microveric.
Нагадаємо це Докер - Це програмне забезпечення, яке дозволяє упакувати програму та всі його залежності в одному модулі. Важливою перевагою є процес розгортання програми, зібраного в контейнері, добре інтегрований у трубку CI/CD.
Коротко, переваги використання Docker:
- Це дозволяє нам перенести програму в інші операційні системи за допомогою підтримки Cgroups;
- Більш ефективно дозволяє завантажувати хост -машину. Віртуальне залізо не створюється, як при використанні віртуальних машин;
- Він ідеально інтегрований у трубопровід CI/CD;
- Додано ще один рівень абстракції, що дозволяє використовувати різні версії мов, бібліотеки тощо на одному хості.
Основні команди управління двигуном Docker
У статті ми знизимо процес встановлення Docker у Linux (ми припускаємо, що ви вже зробили це). Давайте впевнені, що ви встановили та встановлюється послуга Docker і працює. Виконайте команду в терміналі
Sudo systemctl статус docker
Висновок повинен бути приблизно таким:
● Докер.Сервіс - Двигун Docker Apply Container Завантажений: Завантажений (/lib/systemd/system/docker.Послуга; Інвалід; Привід постачальника: увімкнено) Active: Active (запуск) Оскільки TUE 2021-02-16 16:14:48 +05; 4 год 58 хв. Тому Документи: https: // docs.Докер.Com min pid: 20976 (dockerd) завдання: 57 cgar: /система.Зріз/докер.Сервіс ├─20976/usr/bin/dockerd -h fd: // -containerd =/run/containerd/containerd.Sock ├─27968/usr/bin/docker -proxy -proto tcp -host -ip 0.0.0.0 -host -port 5432 -Container -Ip 172.17.0.2 -container -port 5432 └ └28315/usr/bin/docker -proxy -proto tcp -host -ip 0.0.0.0 -host -port 18000 -Container -Ip 172.17.0.3 -container -port 18000
Якщо служба Docker не буде запущена, відображення команди буде приблизно наступним:
● Докер.Сервіс - Двигун Docker Apply Container Завантажений: Завантажений (/lib/systemd/system/docker.Послуга; Інвалід; Привід постачальника: Увімкнено) Активний: неактивне (мертвий), оскільки TUE 2021-02-16 21:17:32 +05; 1s тому Документи: https: // docs.Докер.Com Процес: 20976 execstart =/usr/bin/dockerd -h fd: // -containerd =/run/containerd/containerd.Sock (код = вийшов, статус = 0/успіх) Основний PID: 20976 (код = Вийшов, стан = 0/Успіх)
Спробуйте розпочати послугу з наступної команди
Sudo systemctl запуск Docker
Якщо все пройшло без помилок, ви можете перейти до наступного кроку.
Якщо відображається таке повідомлення:
Робота для Docker.Служба не вдалася, оскільки процес управління вийшов із кодом помилки. Див. "SystemCtl Status Docker.Детальніше.
Тож послуга не розпочалася, і вам потрібно спостерігати за журналом і вирішувати проблему. Наступна команда отримає вміст журналу Service Dockerd:
Sudo journalctl -xe/usr/bin/dockerd
Запуск першого контейнера в Docker
Отже, у вас є докер, і ви можете запустити перший контейнер. Заповніть команду в консолі:
Sudo docker тягнути busybox
За допомогою цієї команди ми завантажили готове зображення Зайнята скринька З сервера Docker Hub. Docker Hub - видавець сховища Docker. Він надає можливість зберігати свій імідж, обмінюватися ними з іншими людьми. Це сховище містить багато готових зображень із популярними. Зайнята скринька - Це набір утель в одному виконуваному файлі Unix.
Sudo docker run -rm oinsuppobla sh
За допомогою цієї команди ми запустили контейнер за допомогою опції -це Ми підключили інтерактивні Tty у контейнері та запустив командну оболонку Штук. Ключ -Rm Дозволяє автоматично зняти контейнер при виході з інтерактивного режиму.
Основні команди контейнера Basybox/Linux доступні всередині контейнера OubyBox.
Припустимо, ви можете побачити список каталогів:
Щоб вийти з контейнера, виконайте команду:
Вихід
Наступна команда дозволяє переглянути список доступних локальних зображень:
Sudo docker зображення
В кінці списку нещодавно завантажено Зайнята скринька.
Ви можете побачити список занедбаних контейнерів з командою:
Sudo docker ps -a
Ви також можете передати фільтр:
Sudo docker ps -filter status = "exted"
Ця команда принесе всі контейнери зі статусом виходу. Це контейнери, які зупиняються, але не видалені.
Це короткий набір команд, які використовуються для запуску контейнера, підключіть інтерактивний tty в контейнер і введіть контейнер.
Запуск контейнера Nginx із зображення Docker Hub
Наступний крок ми збираємо наше зображення на основі готового зображення. Для цього створіть папку в каталозі поточного користувача.
Mkdir nginx
Cd nginx
У цій папці ми створюємо файл індексу.Html та dockerfile з наступного вмісту
Індекс.HTML
Docker Test Я працюю в Docker
Dockerfile
З індексу копіювання NGINX.html/usr/share/nginx/html
У файлі Dockerfile Використовуючи Директиву, ми вказали, що нам потрібно використовувати зображення nginx. Команда копіювання дозволяє скопіювати файл індексу з поточного каталогу.HTML у папці/usr/share/nginx/html на зображенні.
Дотримуйтесь команди nginx:
Sudo docker build . --Тег mynginx
Ця команда завантажує офіційне зображення Docker Hub Nginx останньої доступної версії. Нове місцеве зображення буде позначено Tag Mynginx: Останнє
Тепер ви можете запустити контейнер за допомогою зібраного зображення:
Sudo docker run -p 8080: 80 -d -name nginx_test mynginx
Цю команду ми запустили контейнер. Опція -П Потрібно кинути порт 80 Контейнер на порту хост -автомобілів 8080. Опція -D Дозволяє запускати контейнер у фоновому режимі без посилання на поточну консоль, опція -Назва Встановлює назву контейнер.
Щоб перевірити роботу Nginx на зображенні, відкрийте браузер та перейдіть на адресу http: // localhost: 8080/
. Перш ніж вам слід відкрити сторінку HTML, яку ми скопіювали в контейнер.
Щоб зупинити контейнер, завершити:
Sudo docker stop nginx_test
Щоб видалити контейнер:
Sudo docker rm nginx_test
Ми створюємо просту мікросервіс на Python Framework Fastapi
Створіть структуру проекту:
~# mkdir fpdc
~# CD FPDC
Створіть два відновлення в каталозі FPDC.Txt і main.Плутанина. Головний файл.PY стане точкою введення для запуску програми, файлу requrements.TXT - це залежності.
Додайте до файлу відновлення.Txt наступні залежності:
Fastapi == 0.63.* uvicorn == 0.13.*Фастапі - Це веб -рамки Python, яка дозволяє швидко створювати продуктивні асинхронні веб -сервіси в Python.
Увікург - Це легкий сервер ASGI. З ним ви можете запускати веб -сервіси, написані за допомогою Fastapi, Django, Flask та інших.
Вміст файлів Головний.Плутанина
Від impate fastapi app fastapi = fastapi (title = "test microsevice") @app.Get ("/api/v1/привіт") def hello (name: str = ""): return "msg": f "hello name"
Цей рядок ми створюємо додаток ASGI:APP = Fastapi (title = "Test Microsevice")
Після того, як ми створимо функцію маршруту (маршрутизатор):@App.Get ("/api/v1/hello")
Def Hello (Ім'я: str = ""):
Return "msg": f "hello name"
Рядок над функцією - це деконтинг, він додає маршрут до нашої програми.
Тепер ми створимо DockerFile з таким вмістом:
Від Python: 3.7.7-х
Запустіть mkdir /додаток
Копіювати ./Головний.Py /додаток
WorkDir /APP /
Вимоги до копіювання.Txt /app /requrements.TXT
Запустіть вимоги до встановлення -r -r.TXT
Викрити 8000
Cmd ["uvicorn", "-host", "0.0.0.0 "," Main: App "]
Dockerfile - схоже на MakeFile, він також вказує на команди, але лише для складання контейнера. Давайте більше розглянемо команди.
З
- Ця інструкція встановлює основне зображення (зображення) для складання.
Пробігати
- виконує довільні команди оболонки. У цьому випадку створює каталог /додаток
Копіювати
- Копіює файли з господаря автомобіля до контейнера Docker.
Викривати
- вказує на те, що контейнер слухає порт 8000 при запуску.
CMD
- Вказує, яку команду виконати при запуску контейнера.
У цьому прикладі ми запускаємо сервер Uvicorn, вказуючи на те, що він буде слухати всі інтерфейси і що нам потрібно запустити нашу програму.
Мінімальна послуга створена, ви можете зібрати контейнер.
Sudo docker build . --Тег microsevice_v1
І запустіть отриману послугу:
Sudo Docker Run -P 8000: 8000 -D -НАМА МІКРО_В1 MICROSEVICE_V1
Робота послуги можна перевірити з консолі:
Curl -x get "http: // 127.0.0.1: 8000/API/V1/Hello "-H" Прийняти: додаток/json "
Curl -x get "http: // 127.0.0.1: 8000/API/V1/Привіт?Ім'я = Світ%20 "-h" Прийняти: додаток/json "
Або ви можете зайти до браузера та виконати ці запити. Великий плюс Fastapi Framework полягає в тому, що він автоматично генерує документацію для API, яка доступна за адресою:
http: // localhost: 8000/docs/
Мінімальний робочий мікросервіс був створений та запущений у контейнері Docker. У наступних статтях функціональність буде розширена, створити композицію служб, підключити базу даних, додайте фронтад. Надалі почнемо цю послугу в Kubernetes.