# Как установить Docker на Debian

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

В этой инструкции мы расскажем, как установить и запустить Docker на подготовленном к работе VPS под управлением Debian. Мы рассмотрим два варианта установки — классический и из «Пакетов приложений» Джино, создадим первые контейнеры и познакомимся с базовыми принципами работы в Docker.

# Установка Docker

Перед началом установки Docker обновим список пакетов apt и установим несколько дополнительных приложений, которые нам понадобятся в дальнейшей работе:

sudo apt update

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common

Теперь добавим GPG-ключ Docker в систему, подключим официальный репозиторий Docker и обновим список репозиториев apt:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"

sudo apt update

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

sudo apt-cache policy docker-ce

# Output

docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~debian-buster
  Version table:
 *** 5:20.10.14~3-0~debian-buster 500
        500 https://download.docker.com/linux/debian buster/stable amd64 Packages
        100 /var/lib/dpkg/status
…

На экран будут выведены:

  • текущая версия Docker Installed (none) (в нашем случае её пока нет);

  • версия, которую предлагают установить — Candidte: 5:20.10.14~3-0~debian-buster;

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

Мы не будем выбирать какую-то конкретную и запустим установку последней:

sudo apt install docker-ce

После установки Docker начнёт работу автоматически. Проверить, что Docker установился и запущен, можно стандартной командой для сбора системных данных:

sudo systemctl status docker

# Output

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2022-04-13 13:34:11 +05; 19h ago
     Docs: https://docs.docker.com
 Main PID: 1905 (dockerd)
    Tasks: 16
   Memory: 761.6M
   CGroup: /system.slice/docker.service
           ├─1905 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
           └─2921 /usr/bin/unpigz -d -c

…

Значение Active: active (running) since… показывает активный статус Docker. Программа запущена и готова к началу работы.

# Установка Docker из Пакетов приложений Джино

Если ваш VPS расположен на Джино, то вам доступен экспресс-вариант установки Docker.

В разделе меню VPSУправлениеПакеты приложений выберите Docker в разделе «Другое», согласитесь на установку и дождитесь окончания установки — сервис самостоятельно установит последнюю версию Docker и все необходимые зависимости.

После завершения установки Docker дальнейшая работа с ним ничем не отличается от варианта с классической установкой. В частности, проверить его статус можно всё той же командой:

sudo systemctl status docker

# Начало работы с Docker

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

docker

# Output
Usage:  docker [OPTIONS] COMMAND

A self-sufficient runtime for containers

Options:
      --config string      Location of client config files (default "/home/regular/.docker")
  -c, --context string     Name of the context to use to connect to the daemon (overrides DOCKER_HOST env var and default context set with
                           "docker context use")
  -D, --debug              Enable debug mode

…
Management Commands:
  app*        Docker App (Docker Inc., v0.9.1-beta3)
  builder     Manage builds
  buildx*     Docker Buildx (Docker Inc., v0.8.1-docker)
  config      Manage Docker configs

…
Commands:
  attach      Attach local standard input, output, and error streams to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
…

Чтобы посмотреть все опции, доступные для определённой команды, достаточно ввести саму команду с добавлением флага --help. Например:

sudo docker pull –help

# Output

Usage:  docker pull [OPTIONS] NAME[:TAG|@DIGEST]

Pull an image or a repository from a registry

Options:
  -a, --all-tags                Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform capable
  -q, --quiet                   Suppress verbose output

# Образы в Docker

Docker-контейнеры создаются на основе образов. Основной источник образов — Docker-Hub (opens new window) — ресурс, где размещают свои образы официальные компании и разработчики. По умолчанию Docker ищет образы именно там.

Как это работает?

Вы ищете образ, который вам нужен, например, по ключевым словам «Ubuntu» или «Wordpress»:

sudo docker search ubuntu

# Output

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating sys…   14052     [OK]
websphere-liberty                WebSphere Liberty multi-architecture images …   283       [OK]
ubuntu-upstart                   DEPRECATED, as is Upstart (find other proces…   112       [OK]
sudo docker search wordpress

# Output
NAME                      DESCRIPTION                                         STARS     OFFICIAL   AUTOMATED
wordpress     The WordPress rich content management system…   4678      [OK]

bitnami/wordpress Bitnami Docker Image for WordPress   190                  [OK]
bitnami/wordpress-nginx                  Bitnami Docker Image for WordPress with NGINX   57                   [OK]

В результате поиска на экран выводится таблица с доступными образами, содержащими в названии Ubuntu или Wordpress. В таблице содержится имя образа (NAME), его описание (DESCRIPTION), рейтинг (STARS), указание на то, официальный это образ от разработчика или нет (OFFICIAL) и сведения о его развёртывании (AUTOMATED).

После выбора нужного образа его нужно скачать (получить в случае с Docker):

sudo docker pull ubuntu

sudo docker pull wordpress

Когда образ скачается, на его основе можно создать контейнер, внутри которого образ будет функционировать.

Начнём с проверки доступных (скачанных) образов:

sudo docker images

# Output


REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
wordpress     latest    744143078625   6 days ago     605MB
ubuntu        latest    825d55fb6340   8 days ago     72.8MB

Команда images выводит на экран список всех скачанных образов с указанием их метки, ID, даты создания самого образа и занимаемого ими объёма дискового пространства.

Вы можете запустить контейнер на основе любого из этих образов:

sudo docker run -it ubuntu

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

После запуска контейнера в консоли появится новый идентификатор:

root@1057058e07ef:/#

Он означает, что мы находимся внутри контейнера 1057058e07ef и в данном случае будем выполнять команды от имени root-пользователя.

Например, можем воспользоваться стандартной командой для обновления репозиториев:

apt update

Находящаяся внутри Docker-контейнера Ubuntu обновит список репозиториев apt в штатном режиме, как если бы она работала на полноценной машине.

Можем установить на Ubuntu в docker-контейнере язык программирования Node.js и после завершения установки проверить его версию:

apt install nodejs
node -v

# Output
v10.19.0

Как видим, операционная система внутри контейнера полноценно функционирует.

Теперь можно создавать новое приложение или новый проект уже внутри Docker-контейнера. Любые изменения внутри контейнера никак не повлияют на основную, управляющую операционную систему и не смогут навредить вашему серверу.