Содержание
    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