Создание контейнеров Docker на Linux

DockerBeginner
Практиковаться сейчас

Введение

Это исчерпывающее руководство по Docker предоставляет разработчикам и системным администраторам практическое пособие по пониманию и внедрению технологии контейнеризации. Изучая основные концепции Docker, процедуры установки и базовые команды, обучающиеся приобретут необходимые навыки для создания лёгких, переносимых сред приложений.

Основы Docker

Введение в технологию контейнеризации

Docker — это мощная платформа контейнеризации, которая революционизирует разработку и развертывание программного обеспечения. Она позволяет разработчикам упаковывать приложения со всеми их зависимостями в стандартизированные единицы, называемые контейнерами, обеспечивая согласованную производительность в различных вычислительных средах.

Основные концепции Docker

Что такое Docker?

Docker — это открытая платформа для технологии контейнеризации, которая позволяет разработчикам автоматизировать развертывание, масштабирование и управление приложениями. В отличие от традиционных виртуальных машин, контейнеры Docker используют ядро хост-системы, что делает их лёгкими и эффективными.

graph TD
    A[Код приложения] --> B[Контейнер Docker]
    B --> C[Согласованное развертывание]
    B --> D[Изолированная среда]

Ключевые компоненты Docker

Компонент Описание Назначение
Docker Engine Основной движок Создаёт и запускает контейнеры
Docker Image Читаемый шаблон Определяет конфигурацию контейнера
Docker Container Запускаемый экземпляр Выполняет приложение

Установка на Ubuntu 22.04

## Обновить индекс пакетов
sudo apt update

## Установить зависимости
sudo apt install apt-transport-https ca-certificates curl software-properties-common

## Добавить официальный ключ GPG Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

## Настроить стабильный репозиторий
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg]  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

## Установить Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

Основные команды Docker

## Проверить версию Docker
docker --version

## Скачать образ
docker pull ubuntu:latest

## Список образов
docker images

## Запустить контейнер
docker run -it ubuntu:latest /bin/bash

Сценарии использования контейнеризации Docker

Docker широко используется в:

  • Архитектуре микросервисов
  • Непрерывной интеграции/непрерывном развертывании (CI/CD)
  • Разработке облачных приложений
  • Согласованных средах разработки и производства

Создание образов Docker

Понимание образов Docker

Образы Docker — это шаблоны только для чтения, содержащие всё необходимое для запуска приложения: код, среду выполнения, библиотеки, переменные окружения и конфигурационные файлы. Они служат чертежами для создания контейнеров.

graph LR
    A[Dockerfile] --> B[Docker Image]
    B --> C[Docker Container]

Основы Dockerfile

Dockerfile — это текстовый документ, содержащий инструкции для создания образа Docker. Каждая инструкция создаёт новый слой в образе.

Типы инструкций Dockerfile

Инструкция Назначение Пример
FROM Установка базового образа FROM ubuntu:22.04
RUN Выполнение команд RUN apt-get update
COPY Копирование файлов COPY app.py /app/
WORKDIR Установка рабочей директории WORKDIR /app
CMD Команда по умолчанию CMD ["python", "app.py"]

Создание образца приложения Python

Структура проекта

/project
├── Dockerfile
└── app.py

app.py

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, Docker World!"

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

Dockerfile

## Использование официального образа Python в качестве базового
FROM python:3.9-slim

## Установка рабочей директории
WORKDIR /app

## Копирование файлов проекта
COPY app.py requirements.txt ./

## Установка зависимостей
RUN pip install --no-cache-dir -r requirements.txt

## Экспонирование порта
EXPOSE 5000

## Определение команды по умолчанию
CMD ["python", "app.py"]

Создание и управление образами Docker

## Создание файла requirements.txt
echo "flask" > requirements.txt

## Создание образа Docker
docker build -t my-flask-app .

## Список образов
docker images

## Запуск контейнера из образа
docker run -p 5000:5000 my-flask-app

Стратегии оптимизации образов

  • Использование многоступенчатых билдов
  • Минимизация количества слоёв
  • Использование кэша билда
  • Использование конкретных тегов образов
  • Удаление ненужных файлов

Управление контейнерами

Обзор жизненного цикла контейнеров

Контейнеры Docker имеют сложный жизненный цикл с несколькими состояниями, от создания до завершения. Понимание этих состояний имеет решающее значение для эффективного управления и оркестрации контейнеров.

stateDiagram-v2
    [*] --> Created
    Created --> Running
    Running --> Paused
    Paused --> Running
    Running --> Stopped
    Stopped --> Removed
    Removed --> [*]

Необходимые команды для работы с контейнерами Docker

Команда Функция Пример
docker create Создать контейнер docker create nginx
docker start Запустить контейнер docker start container_id
docker stop Остановить работающий контейнер docker stop container_id
docker restart Перезапустить контейнер docker restart container_id
docker rm Удалить контейнер docker rm container_id

Проверка и мониторинг контейнеров

## Список запущенных контейнеров
docker ps

## Список всех контейнеров
docker ps -a

## Просмотр деталей контейнера
docker inspect container_id

## Просмотр логов контейнера
docker logs container_id

## Мониторинг использования ресурсов контейнера
docker stats

Управление ресурсами контейнеров

## Запуск контейнера с ограничениями на ЦП и память
docker run -d \
  --cpus="1.5" \
  --memory="512m" \
  --name limited-container \
  nginx

Расширенная сетевая работа с контейнерами

## Создание пользовательской сети
docker network create mynetwork

## Запуск контейнера в определенной сети
docker run -d \
  --network=mynetwork \
  --name web-container \
  nginx

Стратегии масштабирования контейнеров

## Масштабирование нескольких экземпляров контейнеров
docker-compose up -d --scale web=3

Управление постоянными данными

## Создание тома
docker volume create myvolume

## Подключение тома к контейнеру
docker run -v myvolume:/app/data \
  --name data-container \
  ubuntu

Рекомендованные практики

  • Использование лёгких базовых образов
  • Реализация проверок работоспособности
  • Минимизация размера контейнера
  • Использование многоступенчатых билдов
  • Реализация надлежащего ведения логов
  • Обеспечение безопасности конфигураций контейнеров

Резюме

Docker представляет собой революционный подход к развертыванию программного обеспечения, предоставляя разработчикам мощную платформу для создания согласованных, изолированных и масштабируемых контейнеров приложений. Овладев основными техниками Docker, специалисты могут оптимизировать рабочие процессы разработки, повысить эффективность системы и упростить управление сложными приложениями в различных вычислительных инфраструктурах.