Найти в Дзене
Linux | Network | DevOps

3 идеи для проектов на Docker: пошаговые инструкции с кодом и пояснениями

Docker — один из наиболее широко используемых инструментов контейнеризации в мире DevOps. Он необходим для эффективной разработки, развёртывания и запуска приложений. В этой статье описаны три практических проекта с использованием Docker, а также приведены полные инструкции и код для каждого из них. Эти проекты помогут вам лучше понять Docker и приложения на основе контейнеров. В этом проекте вы создадите контейнер для простого веб-приложения Flask и запустите его в контейнере Docker. Flask — это легковесный веб-фреймворк на Python, который идеально подходит для демонстрации возможностей Docker при работе с приложениями на Python. Шаг 1. Настройка приложения Flask Сначала давайте создадим базовое приложение Flask. mkdir flask-docker-app
cd flask-docker-app # 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) Flask==2.0
Оглавление

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 и получить ценный опыт для работы над реальными проектами.

Linux | Network | DevOps

Чат

YouTube

VK

Rutube