Зміст

    Як встановити Docker на VPS

    04.07.2025

    Однією з переваг використання Docker є простота його встановлення та розгортання. Під час запиту нового образу автоматично буде встановлено всі програми та залежності, які необхідні для запуску контейнера.

    Для встановлення потрібен VPS зі встановленою операційною системою Ubuntu;  

    Встановлення Docker

    Завантажуємо скрипт встановлення Docker

    curl -fsSL https://get.docker.com -o install-docker.sh

    Перевіряємо роботу завантаженого скрипта

    sh install-docker.sh --dry-run

    Запускаємо встановлення Docker від root користувача

    sudo sh install-docker.sh

    Перевіряємо версію встановленого клієнта і сервера Docker

    docker version

    Для перегляду інформації про запущені контейнери, кількість образів, обсяг доступної пам'яті тощо виконуємо команду:

    docker info

    Термінологія

    • Image — образ контейнера, який є вихідним кодом програми.
    • Container — запущений image. Може бути кілька контейнерів, які запускають один і той самий образ.

    Запуск контейнера

    Для запуску контейнера використовується команда container run. Для прикладу запускаємо контейнер nginx сервера.

    # docker container run --publish 80:80 --detach nginx
    66c3a1547713516fdc82063b6948573df0ad873f08671deadc9495ca93d45870

    Команда docker container run виконує такі дії:

    1. Якщо запитаного образу немає на локальній машині (у нашому випадку на VPS), то його автоматично буде завантажено з репозиторію Docker Hub.
    2. Запускає новий контейнер на підставі образу nginx.
    3. Параметр --publish 80:80 відкриває 80 порт на VPS і весь трафік із цього порту перенаправляє на 80 порт контейнера. Якщо 80 порт уже використовується, то можна вказати інший порт для перенаправлення в контейнер, наприклад --publish 8080:80. У такому разі для перевірки роботи потрібно буде вказати в браузері IP_VPS:8888
    4. Параметр --detach запускає контейнер у фоновому режимі, щоб ви могли користуватися далі консоллю, в якій ви його запустили.

    Команда повертає унікальний код контейнера, який буде використовуватися для управління контейнером.

    Перевіряємо роботу встановленого контейнера вказавши в браузері IP адресу сервера.

    Подивимося список запущених контейнерів:

    # docker container ls
    CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                 NAMES
    66c3a1547713   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, [::]:80->80/tcp   vigorous_jennings

    або ж можна використовувати старий синтаксис

    docker ps

    Першим параметром є перші цифри з номером контейнера. Для управління контейнером достатньо вказувати тільки перші кілька цифр ідентифікатора контейнера. Для прикладу зупинимо контейнер вказавши лише першу цифру:

    docker container stop 66

    Перевіряємо, що контейнер зупинено:

    # docker container ls
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

    Переглянемо всі контейнери, які були запущені раніше, незалежно від того, чи працюють вони зараз:

    # docker container ls -a
    CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS                      PORTS     NAMES
    66c3a1547713   nginx     "/docker-entrypoint.…"   8 minutes ago    Exited (0) 9 seconds ago              vigorous_jennings
    ac7493be39e8   nginx     "/docker-entrypoint.…"   22 minutes ago   Exited (0) 9 minutes ago              zealous_pike
    0d447342ed45   nginx     "/docker-entrypoint.…"   23 minutes ago   Exited (0) 22 minutes ago             admiring_shaw

    Як бачимо, щоразу під час виконання docker container run ми запускаємо новий контейнер, якому присвоюється випадкове ім'я, що складається з імені вченого або хакера та прикметника;  

    Щоб задати своє ім'я контейнеру, використовується параметр --name:

    docker container run --publish 80:80 --detach --name ukraine nginx

    Переглянути логи контейнера ukraine можна виконавши команду

    docker container logs ukraine

    У випадку з nginx будуть виводитися логи запитів на веб сервер.

    Побачити процеси, які запущені в контейнері ukraine:

    # docker container top ukraine
    UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
    root                4174                4151                0                   13:04               ?                   00:00:00            nginx: master process nginx -g daemon off;
    message+            4238                4174                0                   13:04               ?                   00:00:00            nginx: worker process
    message+            4239                4174                0                   13:04               ?                   00:00:00            nginx: worker process

    Видалити кілька контейнерів можна командою rm, при цьому перерахувавши через пробіл перші цифри ідентифікатора контейнера:

    docker container rm 66 ac 0d

    Команда видаляє тільки зупинені контейнери, щоб уникнути випадкового видалення контейнера, який працює.

    Перегляд конфігурації контейнера docker:

    # docker container inspect <ContainerID>

    Інформація про використання ресурсів запущеними контейнерами

    # docker container stats
    CONTAINER ID   NAME                CPU %     MEM USAGE / LIMIT     MEM %     NET I/O          BLOCK I/O     PIDS
    1821fb0a6ee6   inspiring_gagarin   0.00%     3.168MiB / 5.787GiB   0.05%     99.2kB / 183kB   0B / 12.3kB   3

    Як зайти в консоль контейнера Docker

    Для підключення по SSH до контейнера немає необхідності встановлювати всередину контейнера SSH сервер. Досить запустити його з командою --it (інтерактивний режим) і як аргумент після назви образу вказати bash:

    docker container run --it --name proxy nginx bash 

    Якщо в bash виконати команду exit, то ми не тільки вийдемо з контейнера, а й повністю його зупинимо. Це пов'язано з тим, що контейнер працює доти, доки виконується перша запущена контейнером команда, а в цьому випадку це bash. При цьому всі зміни, які ми внесли через консоль у контейнер, залишаються. Наприклад, ми можемо запустити контейнер ubuntu і встановити через консоль mc (Midnight Commander). Після того, як ми вийдемо з контейнера, він зупиниться, але при повторному запуску контейнера mc буде встановлено;  

    Для запуску консолі в контейнері використовуйте:

    docker container start -ai ukraine

    Для внесення змін у працюючий контейнер можна запустити додатковий процес консолі в працюючому контейнері. За такого підходу при виході з консолі контейнер продовжить працювати;  

    docker container exec -it ukraine bash

    Робота з мережею Docker

    Перегляд налаштування перекидання портів між сервером і контейнером:

    # docker container port ukraine
    80/tcp -> 0.0.0.0:80
    443/tcp -> 0.0.0.0:443

    Дізнатися IP-адресу контейнера можна виконавши команду:

    docker container inspect --format '{{ .NetworkSettings.IPAddress }}' ukraine