Docker Compose: руковод BEGINNERov

Привет, будущие магистры Docker! Я рад стать вашим проводником в этом путешествии в мир Docker Compose. Как someone, кто уже давно teaches computer science, я видел, как многие студенты мучаются с conceptами контейнеризации. Но не бойтесь! К концу этого руководства вы будете orchestrating контейнеры как профессионал.

Docker - Compose

Что такое Docker Compose?

Прежде чем мы углубимся, давайте начнем с азов. Представьте, что вы планируете большой party (потому что кто не любит хорошую аналогию?). Вам нужно koординировать еду, напитки, музыку и декорации. Docker Compose - это как ваш инструмент для планирования вечеринки, но для контейнеров!

На техническом языке, Docker Compose - это инструмент для определения и запуска multi-container Docker приложений. Он позволяет вам использовать YAML файл для configure вашего приложения, services, сети и томов, а затем создавать и запускать все услуги из вашей конфигурации одним командой.

Установка Docker Compose

Теперь давайте установим Docker Compose на вашу систему. Процесс так же прост, как pie (мм... pie).

Для пользователей Windows и Mac

Если вы уже установили Docker Desktop,恭喜你! У вас уже есть Docker Compose. Он идет в комплекте с установкой. Вы можете пропустить следующий раздел и сделать счастливый танец.

Для пользователей Linux

Для наших linux друзей, вам нужно установить Docker Compose separately. Вот как:

  1. Скачайте текущую стабильную версию Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Применитеexecutable permissions к бинару:
sudo chmod +x /usr/local/bin/docker-compose
  1. Проверьте установку:
docker-compose --version

Если вы видите номер версии, вы в порядке!

Создание вашего первого Docker-Compose файла

Теперь, когда у нас установлен Docker Compose, давайте создадим наш первый docker-compose.yml файл. Этот файл похож на рецепт вашего приложения - он говорит Docker, какие ингредиенты (услуги) вам нужны и как их готовить.

Давайте создадим простое веб-приложение, используя Python Flask и Redis. Не волнуйтесь, если вы не знакомы с этими технологиями - мы будем держать все просто!

Создайте новую директорию для вашего проекта и перейдите в нее:

mkdir my_first_compose_project
cd my_first_compose_project

Теперь давайте создадим наш docker-compose.yml файл:

version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"

Давайте разберем это:

  • version: '3': Это указывает версию формата файла Docker Compose, которую мы используем.
  • services: Этот раздел определяет контейнеры, которые мы хотим запустить.
  • web: Это наш сервис Flask приложения.
  • build: .: Это говорит Docker построить изображение из Dockerfile в текущей директории.
  • ports: - "5000:5000": Это map порт 5000 на хост к порту 5000 в контейнере.
  • redis: Это наш сервис Redis.
  • image: "redis:alpine": Это говорит Docker использовать официальный Redis изображение из Docker Hub.

Создание Flask приложения

Теперь давайте создадим простое Flask приложение. Создайте файл под названием app.py:

from flask import Flask
from redis import Redis

app = Flask(__name__)
redis = Redis(host='redis', port=6379)

@app.route('/')
def hello():
redis.incr('hits')
return f'Hello World! I have been seen {redis.get("hits").decode("utf-8")} times.'

if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)

Это простое приложение incrementates счетчик в Redis каждый раз, когда страница посещается.

Создание Dockerfile

Следующий, мы должны создать Dockerfile для сборки нашего Flask приложения. Создайте файл под названием Dockerfile:

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]

Этот Dockerfile:

  1. Начинается с Python 3.7 Alpine изображения
  2. Устанавливает рабочую директорию в /code
  3. Устанавливает переменные окружения для Flask
  4. Устанавливает необходимые зависимости
  5. Копирует и устанавливает Python требования
  6. Expose порт 5000
  7. Копирует текущую директорию в контейнер
  8. Устанавливает команду для запуска Flask

Создание файла требований

Последнее, что нам нужно, это specify наши Python зависимости. Создайте файл под названием requirements.txt:

flask
redis

Запуск вашего Docker Compose приложения

Теперь для волнующего момента - запуска вашего приложения! В вашем терминале, запустите:

docker-compose up

Вы должны увидеть, как Docker Compose строит ваши изображения и запускает ваши сервисы. Как только это будет сделано, откройте веб-браузер и перейдите на http://localhost:5000. Вы должны увидеть ваше сообщение "Hello World", и счетчик должен increment каждый раз, когда вы обновляете страницу.

Docker Compose команды

Вот удобная таблица некоторых часто используемых команд Docker Compose:

Команда Описание
docker-compose up Создать и запустить контейнеры
docker-compose down Остановить и удалить контейнеры, сети, изображения и тома
docker-compose ps Список контейнеров
docker-compose logs Просмотр вывода из контейнеров
docker-compose build Построить или перебудовать сервисы
docker-compose start Запустить сервисы
docker-compose stop Остановить сервисы

Заключение

Поздравляю! Вы только что создали и запустили ваше первое многоcontainer приложение с использованием Docker Compose. Мы только поцарапали поверхность того, на что способен Docker Compose, но я надеюсь, что это руководство дало вам прочную основу для дальнейшего развития.

помните, что обучение Docker и контейнеризации похоже на обучение готовке - это требует практики, но как только вы научитесь, вы будете быстро готовить сложные, многоcontainer рецепты!

Счастливого作曲ства, будущие повара Docker!

Credits: Image by storyset