Docker Compose: руковод BEGINNERov
Привет, будущие магистры Docker! Я рад стать вашим проводником в этом путешествии в мир Docker Compose. Как someone, кто уже давно teaches computer science, я видел, как многие студенты мучаются с conceptами контейнеризации. Но не бойтесь! К концу этого руководства вы будете orchestrating контейнеры как профессионал.
Что такое 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. Вот как:
- Скачайте текущую стабильную версию 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
- Применитеexecutable permissions к бинару:
sudo chmod +x /usr/local/bin/docker-compose
- Проверьте установку:
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:
- Начинается с Python 3.7 Alpine изображения
- Устанавливает рабочую директорию в
/code
- Устанавливает переменные окружения для Flask
- Устанавливает необходимые зависимости
- Копирует и устанавливает Python требования
- Expose порт 5000
- Копирует текущую директорию в контейнер
- Устанавливает команду для запуска 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