Docker — один из наиболее широко используемых инструментов контейнеризации в мире DevOps. Он необходим для эффективной разработки, развёртывания и запуска приложений. В этой статье описаны три практических проекта с использованием Docker, а также приведены полные инструкции и код для каждого из них. Эти проекты помогут вам лучше понять Docker и приложения на основе контейнеров.
1. Создание и запуск веб-приложения Flask в Docker
Обзор проекта:
В этом проекте вы создадите контейнер для простого веб-приложения Flask и запустите его в контейнере Docker. Flask — это легковесный веб-фреймворк на Python, который идеально подходит для демонстрации возможностей Docker при работе с приложениями на Python.
Шаги:
Шаг 1. Настройка приложения Flask
Сначала давайте создадим базовое приложение Flask.
- Создайте каталог проекта:
mkdir flask-docker-app
cd flask-docker-app
- В каталоге проекта создайте файл Python под названием app.py:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello, Dockerized Flask App!"
if __name__ == '__main__':
app.run(debug=True, host='0.0.0.0', port=5000)
- Добавьте файл requirements.txt для определения зависимостей проекта:
Flask==2.0.3
Шаг 2. Создайте Dockerfile
Создайте в том же каталоге файл с именем Dockerfile для определения образа нашего приложения Flask.
# Use an official Python runtime as a parent image
FROM python:3.9-slim
# Set the working directory in the container
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install the dependencies
RUN pip install --no-cache-dir -r requirements.txt
# Make port 5000 available to the outside world
EXPOSE 5000
# Define environment variable
ENV FLASK_APP=app.py
# Run the application
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000"]
Шаг 3. Создайте и запустите контейнер Docker
- Создайте образ Docker:
docker build -t flask-app .
- Запустите контейнер Docker:
docker run -d -p 5000:5000 flask-app
Теперь, если вы перейдёте по адресу http://localhost:5000, вы увидите, что ваше приложение Flask работает в контейнере Docker.
Объяснение:
- Мы создали простое приложение Flask, которое прослушивает порт 5000.
- Dockerfile загружает образ Python, настраивает среду, устанавливает зависимости и запускает приложение Flask.
- Команда docker build создает образ из Dockerfile, а команда docker run запускает контейнер с открытым для хоста портом 5000.
2. Многоконтейнерное приложение Node. js и MongoDB с использованием Docker Compose
Обзор проекта:
В этом проекте показано, как использовать Docker Compose для запуска веб-приложения Node. js с базой данных MongoDB в отдельных контейнерах. Docker Compose упрощает управление многоконтейнерными приложениями Docker.
Шаги:
Шаг 1. Настройка приложения Node.js
- Создайте новую папку для своего проекта:
mkdir node-mongo-app
cd node-mongo-app
- Внутри каталога инициализируйте проект Node. js и установите Express и Mongoose:
npm init -y
npm install express mongoose
- Создатьserver.js:
const express = require('express');
const mongoose = require('mongoose');
const app = express();
// MongoDB connection
mongoose.connect('mongodb://mongo:27017/dockerApp', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('MongoDB connected'))
.catch(err => console.log(err));
app.get('/', (req, res) => {
res.send('Hello from Node.js and MongoDB app in Docker!');
});
const PORT = 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
Шаг 2. Создайте Dockerfile для приложения Node.js
# Use an official Node.js runtime as the base image
FROM node:14
# Set working directory inside the container
WORKDIR /app
# Copy package.json and install dependencies
COPY package*.json ./
RUN npm install
# Copy the rest of the application code
COPY . .
# Expose the app port
EXPOSE 3000
# Run the application
CMD ["node", "server.js"]
Шаг 3. Файл Docker Compose
Создайте docker-compose.yml файл, в котором будут определены сервисы (приложение Node. js и MongoDB):
version: '3'
services:
nodeapp:
build: .
ports:
- '3000:3000'
depends_on:
- mongo
volumes:
- .:/app
mongo:
image: mongo
ports:
- '27017:27017'
Шаг 4. Создание и запуск многоконтейнерного приложения
- Соберите и запустите приложение с помощью Docker Compose:
docker-compose up --build
- Теперь вы можете зайти на http://localhost:3000 и посмотреть, как работает приложение.
Объяснение:
- Приложение Node. js и MongoDB работают в отдельных контейнерах.
- Docker Compose помогает управлять несколькими контейнерами, обеспечивая запуск MongoDB до запуска приложения Node. js с помощью поля depends_on.
- volumesмонтирует каталог с исходным кодом, позволяя обновлять его в режиме реального времени без перестроения образа.
3. Развертывание приложения WordPress и MySQL с помощью Docker Compose
Обзор проекта:
В этом проекте мы развернем WordPress сайт с базой данных MySQL с помощью Docker Compose. Это продемонстрирует, как настроить производственную среду с помощью контейнеров.
Шаги:
Шаг 1. Файл Docker Compose для WordPress и MySQL
Создайте каталог проекта и внутри него — файл docker-compose.yml:
version: '3'
services:
wordpress:
image: wordpress:latest
container_name: wordpress_container
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress_user
WORDPRESS_DB_PASSWORD: wordpress_password
WORDPRESS_DB_NAME: wordpress_db
volumes:
- ./wp_data:/var/www/html
db:
image: mysql:5.7
container_name: mysql_container
restart: always
environment:
MYSQL_DATABASE: wordpress_db
MYSQL_USER: wordpress_user
MYSQL_PASSWORD: wordpress_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- ./db_data:/var/lib/mysql
Шаг 2. Создание томов для постоянного хранения данных
В этой настройке мы добавили тома wp_data и db_data для постоянного хранения данных WordPress и MySQL на хост-компьютере.
Шаг 3. Запуск приложения
Чтобы запустить приложение:
- Выполнить:
docker-compose up -d
Это позволит загрузить образы WordPress и MySQL из Docker Hub, настроить переменные среды и запустить контейнеры.
- После запуска контейнеров перейдите по ссылке http://localhost:8080 для завершения установки WordPress.
Объяснение:
- WordPress и MySQL работают в отдельных контейнерах, подключенных к внутренней сети Docker.
- Переменные среды MySQL определяют имя базы данных, пользователя и пароль.
- Раздел volumes гарантирует, что ваши данные WordPress и база данных MySQL останутся нетронутыми, даже если контейнеры будут остановлены или удалены.
Заключение
Эти три проекта дают возможность получить практический опыт работы с Docker в различных реальных сценариях. Приложение Flask демонстрирует, как контейнеризировать простое приложение на Python, проект Node. js и MongoDB показывает, как Docker Compose может управлять приложениями с несколькими контейнерами, а проект WordPress-MySQL демонстрирует, как настроить производственную среду с постоянным хранилищем.
Каждый проект соответствует лучшим отраслевым практикам, таким как изоляция сервисов, определение зависимостей в Dockerfile и docker-compose.yml и использование инструментов оркестрации контейнеров для оптимизации управления приложениями. Эти упражнения помогут вам освоить основные концепции Docker и получить ценный опыт для работы над реальными проектами.