Администрирование Linux
  • Введение в дисциплину
    • Функции, права и ответственность системного администратор
    • Сетевые операционные системы
    • Знакомство с Linux
    • Дистрибутивы Linux
    • Графические оболочки Linux
    • Важно! Основы работы с ВМ!
    • Установка Linux
    • Запуск и останов системы
    • Общие сведения о работе в командной оболочке Linux
      • Документация по ОС Linux
      • Сокращения команд
      • Работа с потоком данных и его фильтрация
      • Выполнение команд. Простейшие команды для работы с каталогами
    • Требования к практическим работам
      • Правила оформления и сдачи отчётов
    • Контрольная работа
    • Практическая работа №1
  • Базовые задачи
    • Работа с пользователями в Linux
      • Редактирование файла Sudoers
      • /etc/passwd и /etc/shadow
      • Права доступа
      • Списки контроля доступа и расширенные атрибуты
      • Практическая работа №2. Управление учетными записями
      • Практическая работа №3. Управление правами доступа
    • Установка программ (утилит) пакетным менеджером
      • Установка программ (утилит) пакетным менеджером. Установка из архивов (тарболов)
      • Troubeshooting пакетных менеджеров
      • Практическая работа №4. Установка программ в Linux
    • Процессы и потребление ресурсов сервера
      • Процессы и потребление ресурсов сервера. Практика
      • Мониторинг процессов и ресурсов в ОС Linux
      • Система инициализации SystemD
      • Практическая работа №5
    • Контрольная работа
  • Управление файлами
    • Структура файловой системы Linux
      • Файлы-устройства
      • Типы файлов (MIME)
      • Сведения об именах файлов
    • Файловые менеджеры Linux
    • Работа с файлами и каталогами в Linux
      • Поиск информации в ОС Linux (find,grep,locate,wc, cut ...)
    • Архивирование файлов в Linux
    • Ссылки. Указатели на файл в ОС Linux
    • Создание раздела диска в Linux
      • Монтирование и разметка диска. Просмотр размера диска
    • Запись cd/dvd дисков в Linux
    • Практическая работа №6. Работа с файлами в UNIX
    • Контрольная работа
  • Сетевые настройки Linux
    • Сетевые настройки Linux
      • Вариант № 1. Сетевые настройки дистрибутивов, основанных на Debian (Astra Linux, Ubuntu, Kubuntu)
      • Вариант № 2. RedHat-based дистрибутивы ( RedOS, OpenSuse, CentOS, Fedora)
    • Настройка параметров прокси
    • Поиск и устранение неисправностей с сетевыми параметрами
      • 11 примеров использования netstat
      • Использование команд ifup, ifdown и ifquery на Linux
    • Практическая работа №7. Управление сетью
    • Iptables, firewalld, ufw, nftables
    • Расчет сети с помощью ipcalc
    • Контрольная работа
  • Сервисы Linux
    • Получение удаленного доступа к сервер
      • Про SSH port forwarding в Linux
    • Протокол DHCP
      • Настройка DHCP сервера (isc-dhcp-server)
    • Протокол DNS
      • Настройка DNS сервера (BIND9)
    • Протокол NTP
      • Настройка NTP сервера
    • Протокол FTP
      • Настройка FTP-сервера (vsftpd)
    • Протокол samba
      • Настройка Samba
    • Сетевая файловая система NFS
      • Настройка NFS
    • Настройка центра сертификации OpenSSL
    • Системы управления базами данных
      • Установка и настройка СУБД MySQL
      • Установка и настройка СУБД MongoDB
    • Веб-сервер
      • Apache
        • Установка и настройка стека LAMP
        • Установка и настройка PHPMyAdmin
        • Установка и настройка Wordpress
      • Nginx
        • Установка и настройка Nginx
    • Docker
      • Установка и развертывание приложения в Docker
    • Почтовый сервер Postfix, Dovecot
    • Что такое прокси сервер
      • Прокси Squid
    • OTRS
    • LMS
    • MediaWiki
    • ClamAV
    • CUPS
    • Rsyslog: syslog сервер в Linux
    • Резервное копирование в Linux
      • Резервное копирование через скрипт
      • Bacula
    • Контрольная работа
  • Дополнительно
    • Использование скриптов в ОС Linux
      • Написание bash-скриптов
      • Написание скриптов на Perl
      • Написание скриптов на Python
    • Игры и пасхалки в консоли Linux
    • Полезные ресурсы
    • Рекомендации ФСТЭК по безопасной настройке операционных систем Linux
Powered by GitBook
On this page
  • Что такое контейнеры
  • Преимущества использования контейнеров Docker
  • Docker решает проблемы зависимостей и рабочего окружения
  • Изоляция и безопасность
  • Ускорение и автоматизация развертывания приложений и масштабируемость
  • Контейнеры приближают к микросервисной архитектуре
  • Docker compose — одновременно развернуть несколько контейнеров
  • Хранение данных в Docker
  • Тома (Docker volumes)
  • Монтирование каталога (bind mount)
  • Архитектура (компоненты) Docker
  • Docker daemon
  • Docker client (клиент)
  • Docker image (образ)
  • Docker container (контейнер)
  • Docker Registry
  • Dockerfile
  1. Сервисы Linux

Docker

Что такое контейнеры

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

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

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

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

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

Преимущества использования контейнеров Docker

Контейнеры упрощают работу как программистам, так и администраторам, которые развертывают эти приложения.

Docker решает проблемы зависимостей и рабочего окружения

Контейнеры позволяют упаковать в единый образ приложение и все его зависимости: библиотеки, системные утилиты и файлы настройки. Это упрощает перенос приложения на другую инфраструктуру.

Например, разработчики создают приложение в системе разработки — там все настроено, приложение работает. Когда оно готово, его нужно перенести в систему тестирования, а затем в продуктивную среду. Если в одной из них нет нужной зависимости, приложение не будет работать. Программистам придется отвлечься от разработки и совместно с командой поддержки разобраться в ситуации.

В контейнерах такой проблемы нет, так как они содержат в себе все необходимое для запуска приложения. Специалисты занимаются разработкой, а не решением инфраструктурных проблем.

Изоляция и безопасность

Контейнер — это набор процессов, изолированных от основной операционной системы. Приложения работают только внутри контейнеров и не имеют доступа к основной операционной системе. Это повышает безопасность приложений: они не смогут случайно или умышленно навредить основной системе. Если приложение в контейнере завершится с ошибкой или зависнет, это никак не затронет основную ОС.

Ускорение и автоматизация развертывания приложений и масштабируемость

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

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

Контейнеры приближают к микросервисной архитектуре

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

Это позволяет разрабатывать новую функциональность быстрее, ведь в случае с монолитной архитектурой изменение какой-то части может затронуть всю остальную систему.

Docker compose — одновременно развернуть несколько контейнеров

Docker-compose позволяет разворачивать и настраивать несколько контейнеров одновременно. Например, для веб-приложения нужно развернуть стек LAMP: Linux + Apache, MySQL, PHP. Каждое из приложений — это отдельный контейнер для ОС Linux. Но в этой ситуации нам нужны именно все контейнеры вместе, а не отдельно взятое приложение. Docker-compose позволяет развернуть и настроить все приложения одной командой, а без него пришлось бы разворачивать и настраивать каждый контейнер отдельно.

Хранение данных в Docker

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

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

Но далеко не все приложения такие, и есть много данных, которые нужно сохранить. В контейнерах для этого предусмотрены несколько способов.

Тома (Docker volumes)

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

Монтирование каталога (bind mount)

В этом случае директория сначала создается на хост-машине а уже потом монтируется в контейнеры.

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

Архитектура (компоненты) Docker

Теперь рассмотрим подробнее компоненты, из которых состоит Docker.

Docker daemon

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

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

Docker client (клиент)

Это интерфейс командной строки для управления Docker daemon. Мы пользуемся этим клиентом, когда создаем и разворачиваем контейнеры, а клиент отправляет эти запросы в Docker daemon.

Docker image (образ)

Это неизменяемый файл (образ), из которого разворачиваются контейнеры. Приложения упаковываются именно в образы, из которых потом уже создаются контейнеры. В технической литературе можно также встретить описание image как шаблона запуска процесса.

Приведем аналогию на примере установки операционной системы. В дистрибутиве (образе) ОС есть все, что необходимо для ее установки. Но этот образ нельзя запустить, для начала его нужно «развернуть» в готовую ОС. Так вот, дистрибутив для установки ОС — это образ, а установленная и работающая ОС — это контейнер. Но контейнеры обычно разворачиваются одной командой — это намного проще и быстрее, чем установка ОС.

Docker container (контейнер)

Это уже развернутое из образа и работающее приложение.

Docker Registry

Dockerfile

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

Для примера рассмотрим Dockerfile, который мы будем использовать в Установка и развертывание приложения в Docker, чтобы развернуть собственное приложение:

FROM python:3 
COPY main.py /
CMD [ "python", "./main.py" ]

Первая строчка означает, что за основу мы берем образ с названием python версии 3 это называется базовый образ. Docker найдет его в docker registry, скачает и будет использовать за основу. Вторая строчка означает, что нужно скопировать файл main.py в корень файловой системы контейнера. Третья строчка означает, что нужно запустить python и передать ему в качестве параметра название файла main.py.

Далее рассмотрим примеры нескольких команд докер и что происходит, когда мы их выполняем.

Все эти команды выполняются в Docker client, который отправляет их в Docker daemon:

  • Команда docker build (зеленая стрелка) читает dockerfile и собирает образ.

  • Команда docker pull (красная стрелка) скачивает образ из docker registry. По умолчанию docker скачивает образы из публичного репозитория Docker Hub. Но можно создать свой репозиторий и настроить докер, чтобы он работал с ним.

  • Команда docker run (черная стрелка) берет образ и запускает из него контейнер.

PreviousУстановка и настройка NginxNextУстановка и развертывание приложения в Docker

Last updated 1 year ago

Это репозиторий с образами. Разработчики создают образы своих программ и выкладывают их в репозиторий, чтобы их можно было скачать и воспользоваться ими. Распространенный публичный репозиторий — . В нем собраны образы множества популярных программ или платформ: базы данных, веб-серверы, компиляторы, операционные системы и так далее. Также можно создать свой приватный репозиторий, например внутри компании. Разработчики будут размещать там образы, которые будут использоваться всей компанией.

Docker Hub