Подготовка простого проекта Docker Compose
На этом шаге мы подготовим простой проект Docker Compose. Поскольку Docker Compose не предустановлен в среде LabEx, мы сначала установим его. Затем мы создадим простое веб-приложение и файл Docker Compose для его определения и запуска.
Сначала установим Docker Compose. Мы загрузим бинарный файл Docker Compose и сделаем его исполняемым.
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Теперь проверим установку, посмотрев версию Docker Compose.
docker-compose --version
В выводе вы должны увидеть установленную версию Docker Compose.
Далее мы создадим простое веб-приложение. Мы будем использовать базовое приложение на Python Flask. Создадим директорию для нашего проекта и перейдём в неё.
mkdir my-web-app
cd my-web-app
Внутри директории my-web-app
создадим файл app.py
со следующим содержимым:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, Docker Compose!'
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0')
Это простое приложение Flask, которое возвращает "Hello, Docker Compose!" при обращении.
Теперь нам нужен Dockerfile
для сборки Docker-образа нашего приложения Flask. Создадим файл Dockerfile
в директории my-web-app
со следующим содержимым:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
Этот Dockerfile использует slim-образ Python 3.9, устанавливает рабочую директорию, копирует и устанавливает зависимости из requirements.txt
, копирует код приложения, открывает порт 5000 и указывает команду для запуска приложения.
Нам также понадобится файл requirements.txt
для зависимости Flask. Создадим файл requirements.txt
в директории my-web-app
со следующим содержимым:
Flask==2.2.2
Наконец, создадим файл docker-compose.yml
для определения нашего сервиса. Создадим файл docker-compose.yml
в директории my-web-app
со следующим содержимым:
version: "3.8"
services:
web:
build: .
ports:
- "5000:5000"
Этот файл docker-compose.yml
определяет сервис с именем web
. Он указывает Docker Compose собрать образ, используя Dockerfile
в текущей директории (.
), и пробросить порт 5000 хоста на порт 5000 контейнера.
Теперь соберём и запустим сервис с помощью Docker Compose. Убедитесь, что вы находитесь в директории ~/project/my-web-app
.
docker-compose up -d
Эта команда соберёт образ (если он ещё не собран), создаст контейнер для сервиса web
и запустит его в detached-режиме (-d
).
Вы можете проверить, запущен ли контейнер, с помощью команды docker ps
.
docker ps
Вы должны увидеть контейнер для сервиса my-web-app-web-1
в состоянии "running".
Чтобы проверить работу приложения, можно обратиться к нему с помощью curl
.
curl http://localhost:5000
Вы должны увидеть вывод "Hello, Docker Compose!".