Deployment Flow(docker part)

Послідовність розгортання виглядає наступним чином:

  1. Написання коду додатка.
  2. Створення імеджу контейнера (container image) для додатка.
  3. Завантаження імеджу в контейнер registry у власний репозиторій.
  4. Написання власного Kubernetes-маніфесту, який буде посилатись на імедж.
  5. Виконання команди kubectl, яка відправить цей маніфест на API-сервер.

Згадаємо як новий імедж завантажується на Docker Hub:

Для розгортання тобі знадобиться додаток на Python, який ти вже використовував у модулі по Docker. Мова йде про початкову версію, без файлу для збереження стану, без бази та без multistage-білду Docker-імеджу:

from flask import Flask, Response, send_file
import os

app = Flask(__name__)

@app.route('/')
def hello():
   return f'''
   Docker is Awesome!
<pre>                   ##        .</pre>
<pre>             ## ## ##       ==</pre>
<pre>          ## ## ## ##      ===</pre>
<pre>      /""""""""""""""""\___/ ===</pre>
<pre> ~~~ (~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===-- ~~~</pre>
<pre>      \______ o          __/</pre>
<pre>        \    \        __/</pre>
<pre>         \____\______/</pre>
   '''

@app.route('/logo')
def docker_logo():
   return send_file('docker-logo.png', mimetype='image/png')

if __name__ == '__main__':
   app.run(host='0.0.0.0', port=8080)

Тепер до Docker-файлу:

# Use the official Python image as the base image
FROM python:3.8

# Set the working directory within the container
WORKDIR /app

# Copy the application code into the container
COPY app.py .
COPY docker-logo.png .

# Install Flask and other dependencies
RUN pip install Flask

# Expose port 8080 to the host
EXPOSE 8080

# Define the command to run the application
ENTRYPOINT ["python", "app.py"]

Далі потрібно:

  1. Визначити робочу директорію.
  2. Скопіювати файли.
  3. Встановити Flask.
  4. Встановити порт 8080, який буде слухати додаток.
  5. Вказати, що файл Python є вхідною точкою (entrypoint).

Тепер можна перевірити, чи все працює збілдивши image і запустивши додаток локально. Ти вже у терміналі, у директорії, де знаходиться файл Docker, тому потрібно виконати команду:

docker build . -t kub2py:1.0.0

Тепер перевір усі images за допомогою команди docker images:

REPOSITORY      TAG      IMAGE ID       CREATED          SIZE                                                             
kub2py          1.0.0    692ce37d00a1   24 minutes ago   1.01GB   

Запусти команду docker run -p 8080:8080 kub2py:1.0.0 -n app-py:

Якщо output схожий на той, що ти бачиш вище, значить все добре. Залишився останній крок — завантажити image у registry. Для цього тобі потрібно зайти на Docker Hub і створити новий репозиторій для цього image. Після авторизації на Docker Hub під своїм акаунтом натисни кнопку Create repository . Назви цей репозиторій kub2py і натисни Create .

Тепер залишилось змінити тег на локальному імеджі та виконати docker push. Спочатку зміни тег.

docker tag kub2py:1.0.0 ikulyk404/kub2py:1.0.0 
docker images
REPOSITORY         TAG     IMAGE ID       CREATED          SIZE
Kub2py                  1.0.0   692ce37d00a1   32 minutes ago   1.01GB
ikulyk404/kub2py   1.0.0   692ce37d00a1   32 minutes ago   1.01GB

Виконай docker login:

docker login -u ikulyk404                               1 ✘  16s   13:26:48  
Password: 
Login Succeeded

А тепер docker push:

docker push ikulyk404/kub2py:1.0.0                        ✔  20s   13:28:08

У консолі ти побачиш наступне:

The push refers to repository [docker.io/ikulyk404/kub2py]
c674b179e1aa: Pushed 
e5d739c0bb6e: Pushed 
9b55140f3e55: Pushed 
974a375a56cf: Pushed 
ef104393f94e: Pushed 
aeffcba91ac0: Pushing [===========================================>]5.12kB
eecf0e3feddd: Pushing [===========================================>]44.21MB
6a829aee45dc: Pushing [===========================================>]19.7MB
292bbffe4917: Pushing [=======================>]  262.5MB/559.8MB
d64e22d53437: Pushing [===========================================>]187.5MB
369d2341f368: Waiting 
77ad615d04d4: Waiting

Якщо все виглядає так, як представлено вище, можна переходити до перевірки репозиторію на Docker Hub. Перезавантаж сторінку, якщо output буде схожим на той, що нижче, можна рухатись далі: