Docker

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

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

Docker Image - собственно, шаблон готового к запуску приложения со всем нужным для работы окружением. Контейнер - это уже выполняющийся, запущенный образ, готовый к дальнейшему использованию. Docker Hub (докер хаб) - сервис с реестром образов, где можно брать и загружать свои образы.

Есть два способа упаковки и переноса приложений со всеми его библиотеками между различными системами: использовать виртуальную машину или Docker-контейнер. Если выбрать виртуальную машину:

  • это ещё одна полноценная операционная система, в которой живут десятки процессов;
  • долгий старт приложения;
  • минимальный образ ОС весит более 100 МБ;
  • виртуальная машина потребляет много ресурсов, таких как процессор и оперативная память.

Из плюсов — у виртуальной машины удобные способы управления.

Если выбрать Docker-контейнер:

  • это будет облегченная операционная система с единственным процессом — вашим приложением;
  • быстрый старт приложения;
  • маленький размер контейнера.

Из минусов — у Docker сложная система управления контейнерами, которой можно управлять как локально на сервере, так и по протоколу HTTP.

Главное отличие технологий в том, что виртуальная машина виртуализирует аппаратные ресурсы, такие как процессор, память, системы input и output, а docker контейнеры виртуализируют только ОС.

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

  • Обновление репозитория и установка зависимостей:
apt update
apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common
  • Теперь можно загрузить и установить пакет Docker. Добавьте в систему GPG-ключ репозитория Docker:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
  • Добавьте этот репозиторий Docker в APT и обновить индекс пакетов
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
 
apt update
  • Чтобы установить Docker, введите:
apt install docker-ce
  • После установки долен запустится демон и настроится автозапуск процесса, проверим командой:
systemctl status docker

Теперь в системе работает системная служба Docker.

Разберем поля docker ps -a (или container ls -a)

CONTAINER ID - идентификатор контейнера, он уникален.

IMAGE - название образа, на основе которого запущен контейнер;

COMMAND - выполняемая при запуске контейнера команда;

CREATED - Когда был создан контейнер.

STATUS - статус контейнера, активен он или выключен.

PORTS - порты, через которые сервисы извне взаимодействует с контейнером и тем, что внутри него;

NAMES - имя контейнера.

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

FROM ubuntu

RUN apt update -y RUN apt install fortune -y RUN ln -s /usr/games/fortune /usr/bin/fortune

ENTRYPOINT ["fortune"] docker-compose - утилита для запуска мультиконтейнерных (т.е. состоящих из нескольких докер-контейнеров) приложений. docker-compose.yml - файл, в котором хранится конфигурация(инструкция) запускаемого проекта docker-compose:

version: '3.1'
services:
  db:
    image: mariadb
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

В нём могут задаваться такие директивы:

version - это версия файла, в зависимости от которой используются разные ограничения, например, одна и та же команда может работать в зависимости от версий;

services - описание сервисов, которые мы будем использовать;

db, adminer - названия сервисов (но не контейнеров);

image - образ, из которого мы будем запускать контейнер;

restart - нужно ли перезапускать контейнер;

environment - здесь можно переопределить переменные окружения (опционально);

ports - какие порты со стороны контейнера и хоста использовать.