Содержание

Настройка окружения под Web

Node.js

Node Version Manager

Для управления установленной версией Node.js рекомендуется использовать Node Version Manager.

Установка или обновление nvm (версия 0.39.3):

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash

Открыть новое окно терминала для загрузки установленных переменных окружения и выполнить

nvm --version

Установка Node.js

  1. Определение актуальной версии на сайте проекта Node.js или через nvm командой:
    nvm ls-remote
  2. Установка требуемой версии node.js:
    nvm install 18.16.1
  3. Проверка установки в новом окне терминала:
    node --version

Docker

Учебные материалы

Экосистема Docker (DigitalOcean):

Изучаем Docker (Хабр):

Официальное руководство:

Основные компоненты и инструменты

Безопасность

Docker контейнер, являющийся с точки зрения хост-системы процессом, всегда запускается от пользователя root, при этом внутри контейнера по умолчанию также используется root пользователь. Этим обусловлено повышенное внимание к требованиям безопасности при использовании docker'а.

Способы повышения привилегий для запуска контейнера:

О дополнительных мерах усиления безопасности при использовании docker контейнеров см. ссылку.

Установка в Debian

Для свободной установки доступно несколько вариантов:

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

Шаг №1. Удаление версии из репозитория
apt purge docker docker.io docker-compose
Шаг №2. Установка пакетов для работы с репозиториями

Скорее всего данные пакеты в системе уже будут установлены

apt install ca-certificates curl gnupg lsb-release
Шаг №3. Добавление официального GPG ключа Docker репозитория в систему
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/docker-pub.gpg --import
chmod 644 /etc/apt/trusted.gpg.d/docker-pub.gpg
Шаг №4. Добавление репозитория в систему
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/docker-pub.gpg] https://download.docker.com/linux/debian $(lsb\_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
Шаг №5. Обновление списка доступных пакетов
apt update
Шаг №6. Установка Docker'а
apt install docker-ce

При этом будут установлены все необходимые компоненты: containerd.io, docker-compose-plugin и др.

Шаг №7. Проверка статуса Docker сервиса
systemctl status docker
Шаг №8. Запуск первого контейнера
sudo docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
719385e32844: Pull complete 
Digest: sha256:dcba6daec718f547568c562956fa47e1b03673dd010fe6ee58ca806767031d1c
Status: Downloaded newer image for hello-world:latest
 
Hello from Docker!
This message shows that your installation appears to be working correctly.
 
To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 
Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/
 
For more examples and ideas, visit:
 https://docs.docker.com/get-started/

Настройка

Настройка Firewall

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

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

Проброс портов. При установке Docker'а в хост системе появляется сетевой интерфейс docker0, для которого необходимо разрешить устанавливать входящие соединения:

iptables -I INPUT -i docker0 -j ACCEPT
iptables -I OUTPUT -o docker0 -j ACCEPT

Для FireHol'а правила будут выглядеть следующим образом:

interface docker0 DockerNET
          client all accept
          server all accept

Интернет для контейнера. Для работы интернета внутри контейнера необходимо настроить NAT для интерфейса docker0:

iptables -I FORWARD -i docker0 -o eth0    -j ACCEPT
iptables -I FORWARD -i eth0    -o docker0 -j ACCEPT
iptables -P FORWARD DROP
iptables -t nat -I POSTROUTING -s 172.17.0.1/16 -o eth0  -j MASQUERADE

Здесь eth0 - внешний сетевой интерфейс с выходом в интернет, 172.17.0.1/16 - подсеть Docker'а по умолчанию. Соответствующая настройка NAT через FireHol:

router Wan-to-Docker inface eth0 outface docker0 
        route all accept
router Docker-to-Wan inface docker0 outface eth0 
        route all accept

Дополнительно о совместной работе FireHol'а и Docker'а см. обсуждение на GitHub'е; об особенностях работы Docker'а с iptables в статье по ссылке.

Проверка проброса портов

sudo docker run -p 8000:80 ubuntu/apache2

Переход в хост системе по адресу http://localhost:8000 должен показать «Apache2 Default Page»

Проверка интернета в контейнере

Список запущенных контейнеров

docker ps
CONTAINER ID   IMAGE            COMMAND                CREATED        STATUS          PORTS                                   NAMES
6eed6a35de0c   ubuntu/apache2   "apache2-foreground"   24 hours ago   Up 51 minutes   0.0.0.0:8000->80/tcp, :::8000->80/tcp   cranky_bartik

Подключение к запущенному контейнеру либо через его ID «6eed6a35de0c», либо через NAME «cranky_bartik»

sudo docker exec -it cranky_bartik /bin/bash

В оболочке контейнера попытаться обновить список доступных пакетов:

root@6eed6a35de0c:/# apt update

При наличии интернета в контейнере начнётся стандартное обновление списка доступных пактов.

Реестр DockerHub

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

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

Авторизация. Для взаимодействия с DockerHub из консоли необходимо авторизоваться с помощью команды:

sudo docker login

Также авторизоваться можно на сайте DockerHub'а.

Выход из реестра, соответственно:

sudo docker logout

Поиск образов. Для поиска публичных образов в DockerHub'е служит команда:

sudo docker search ubuntu

Здесь «ubuntu» - произвольное имя искомого docker-образа. Результаты поиска можно фильтровать, например, по числу звёзд и принадлежности к разработчикам ПО:

docker search --filter is-official=true --filter stars=99 ubuntu

Дополнительно при поиске через сайт DockerHub можно узнать общее число скачиваний образа.

Работа с docker-образом

Docker-образ представляет собой неизменяемую основу (файловая система, метаданные и настройки) на базе которой, создается и запускается Docker-контейнер, являющийся запущенным экземпляром docker-образа.

Скачать из реестра. После поиска необходимого образа, например ubuntu/apache2, его можно загрузить:

sudo docker pull ubuntu/apache2

Получить список образов. Доступные локально образы:

sudo docker images

Удалить образ. Удалить локальный образ «hello-world»:

sudo docker image rm hello-world
# or 
sudo docker rmi hello-world

Удаление доступно, когда к образу не прикреплён какой-либо контейнер.

Создание docker-образа:

Передача переменных окружения в контейнер:

sudo docker run --name "openapi-editor" -d -p 1010:8080 -e URL_SWAGGER2_GENERATOR=null -e URL_OAS3_GENERATOR=null swaggerapi/swagger-editor

Здесь запускается контейнер с Swagger Editor'ом, в котором отключены функции генерации кода.

Работа с docker-контейнером

Получить список контейнеров. Получить список всех локально существующих контейнеров. Параметр «-a» выведет полный список контейнеров, включая со статусом «Exited», параметр «-s» покажет соответвтвующий размер.:

sudo docker ps -as

Создать и запустить контейнер:

Создать и запустить контейнер в интерактивном режиме

Запустить существующий контейнер:

sudo docker start container-apach2

Установить автозапуск контейнера:
Использовать опцию –restart policies, где параметр policies может принимать следующие значения:

Выполнить команду внутри контейнера:

Перезапустить контейнер:

sudo docker restart %container_name%

Остановить контейнер. Процесс в контейнере получает сигнал SIGTERM и через некоторое время SIGKILL. Остановка контейнера эквивалентна штатному выключению системы при обработке процессом сигнала SIGTERM и отключению питания, если процесс получает сигнал SIGKILL.

sudo docker stop container-apache2

Удалить контейнер:

Переименовать контейнер

sudo docker rename tst-apache2 container-apache2

Просмотр логов

sudo docker logs --follow %container_name%

Тома Docker

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

Расположены тома в хостовой файловой системе в каталоге:

/var/lib/docker/volumes/%name%

Создание тома

Удаление тома

Просмотр информации:

Монтировние тома

Часто используемые параметры –mount или -v:

Очистка данных

Удаление неиспользуемых сетей

sudo docker network prune

Удаление всех неиспользуемых объектов:

GUI для управления контейнерами

Dockerfile

Создание образа

Сценарий создания собственного Docker образа описывается текстовым файлом с именем «Dockerfile».

Загрузка образа на Docker Hub