Docker официальный ссылки
Документация Docker: https://docs.docker.com
Docker Hub (хранилище образов): https://hub.docker.com
Репозиторий Docker на GitHub: https://github.com/docker
Docker Compose (документация): https://docs.docker.com/compose
Платформы на которых выполнялось тестирование: Операционная система: Ubuntu 22.04
ОГЛАВЛЕНИЕ:
Что такое Docker и зачем он нужен?
Что такое Docker Compose и зачем он нужен?
Установка Docker && Docker Compose.
Добавление пользователя в рабочую группа
docker
.Удаление неиспользуемых сетей Docker
Отказ от ответственности.
Гайды. Ноды. Тестнеты | Teletype "OdaNoder" | Mirror "OdaNoder" | Telegram группа
Docker — это платформа для автоматизации развертывания, управления и масштабирования приложений в контейнерах. Контейнеры — это изолированные окружения, которые позволяют приложениям работать независимо друг от друга и от основной операционной системы. Они содержат все необходимые для работы компоненты: библиотеки, зависимости, и сам код приложения.
Основные преимущества Docker:
Изоляция приложений. Каждое приложение запускается в отдельном контейнере, что гарантирует его независимость от других программ, работающих на том же сервере.
Масштабируемость и переносимость. Приложения, упакованные в контейнеры, можно легко перемещать между различными серверами и средами разработки, тестирования и производства.
Эффективность. Контейнеры потребляют меньше ресурсов по сравнению с виртуальными машинами, так как они используют ядро операционной системы хоста.
Упрощение развертывания. С помощью Docker можно быстро развернуть и обновить приложение, сводя к минимуму риски конфликтов с зависимостями.
Пример использования Docker:
Разработчики могут создать приложение на своих локальных машинах, упаковать его в контейнер с помощью Docker и запустить его на сервере в любом месте. Это устраняет проблему совместимости и конфигурации окружений — разработчики и системные администраторы работают с одинаковыми контейнерами.
Docker Compose — это инструмент, который позволяет легко управлять многоконтейнерными приложениями. Он позволяет описывать в одном файле конфигурацию нескольких контейнеров и автоматизировать их запуск, остановку и управление.
Основные преимущества Docker Compose:
Упрощение работы с многоконтейнерными приложениями. Если ваше приложение состоит из нескольких компонентов (например, веб-сервер, база данных, кэш-сервер), Compose позволяет запустить их все одним командным файлом.
Автоматизация процесса развертывания. Вместо того чтобы вручную запускать каждый контейнер, можно просто написать файл docker-compose.yml
, где будут описаны все зависимости и конфигурации контейнеров.
Гибкость и читаемость. Docker Compose использует YAML для описания конфигурации контейнеров, что делает его легким для понимания и настройки.
Поддержка масштабирования. Docker Compose позволяет масштабировать каждый компонент приложения, запуская несколько экземпляров контейнеров для распределения нагрузки.
Пример использования Docker Compose:
Предположим, у вас есть веб-приложение, использующее базу данных MySQL и Redis для кэширования. Вместо того чтобы вручную запускать три отдельных контейнера, можно создать файл docker-compose.yml
со следующим содержимым:
version: '3'
services:
web:
image: my-web-app
ports:
- "8080:80"
depends_on:
- db
- redis
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: example
redis:
image: "redis:alpine"
В данном файле описывается три сервиса: веб-приложение, база данных и Redis. С помощью одной команды docker-compose up
все они будут запущены и готовы к работе.
Docker позволяет изолировать и упаковывать приложения в контейнеры, делая их переносимыми и удобными для развертывания. Docker Compose, в свою очередь, упрощает управление и автоматизацию многоконтейнерных приложений, позволяя легко настраивать зависимости и обеспечивать взаимодействие между сервисами.
Варианты установки:
Автоматическая установка Docker && Docker Compose с использованием официального скрипта (если до этого докер не устанавливался)
Официальный источник GitHub
Перед установкой стоит ознакомиться:
Для запуска скрипта требуются root
привилегии .sudo
Скрипт не предназначен для обновления существующей установки Docker. При использовании скрипта для обновления существующей установки зависимости могут не обновиться до ожидаемой версии, что приведет к устаревшим версиям.
Скрипт пытается определить ваш дистрибутив Linux и его версию, а также настроить вашу систему управления пакетами.
Скрипт не позволяет настраивать большинство параметров установки.
Скрипт устанавливает зависимости и рекомендации, не запрашивая подтверждения. Это может установить большое количество пакетов, в зависимости от текущей конфигурации вашей хост-машины.
По умолчанию скрипт устанавливает последнюю стабильную версию Docker, containerd и runc. При использовании этого скрипта для подготовки машины это может привести к неожиданным обновлениям основной версии Docker. Всегда проверяйте обновления в тестовой среде перед развертыванием в производственных системах.
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh
docker
.При необходимости добавляем локального пользователя в группу docker
, что бы не вводить каждый раз sudo
. USER
можно оставить система автоматически подменить его на локального пользователя или укажите вручную имя нужного пользователя. Замените your_username
на имя пользователя, которого вы хотите добавить
sudo usermod -aG docker $USER
sudo usermod -aG docker your_username
Выходим и заново авторизируемся на сервере.
Проверить билд Docker контейнера
Чтобы узнать, какой именно билд Docker контейнера используется, использовать inspect
. Это даст подробную информацию о контейнере, включая его исходный образ и другие метаданные.
docker inspect <container_id>
В значении "Image"
будет указан хэш образа, который был использован.
docker inspect <container_id> | grep "Image"
Проверка версии/тега образа
docker images
docker
Команда docker
— это основная команда для работы с Docker. Она служит для запуска и управления контейнерами, образами, сетями и томами. Основные действия выполняются через подкоманды, каждая из которых отвечает за свою область работы с Docker.
docker [COMMAND] [OPTIONS]
Где: [COMMAND]
— подкоманда, которая выполняет конкретное действие (например, run
, ps
, logs
, и т.д.). [OPTIONS]
— опции для модификации поведения команды.
docker
:docker run
— запуск контейнеров.
docker ps
— отображение списка контейнеров.
docker stop
— остановка контейнеров.
docker rm
— удаление контейнеров.
docker rmi
— удаление образов.
docker exec
— выполнение команд в контейнерах.
docker login
— аутентификация в Docker Registry.
docker pull
— загрузка образа из реестра.
docker push
— отправка образа в реестр.
docker inspect
— получение детальной информации о контейнере или образе.
docker stats
—
встроенный инструмент Docker, который показывает использование ресурсов (CPU, память, сеть, диск) для запущенных контейнеров в реальном времени. Он предоставляет подробную информацию о производительности каждого контейнера без необходимости использования дополнительных инструментов.
docker
:--help
— вывод справки по команде или подкоманде.
docker --help
Показывает список всех доступных подкоманд.
--version
— показывает текущую версию Docker.
docker --version
--config
— указывает путь к пользовательскому конфигурационному файлу Docker.
docker --config /path/to/config
Для удаления неиспользуемых сетевых интерфейсов после удаления контейнеров Docker, вы можете воспользоваться командой docker network prune
, которая удалит все неиспользуемые сети. Также можно вручную удалить определённые интерфейсы, которые больше не используются.
Вот шаги, которые можно выполнить:
Команда docker network prune
удалит все сети, которые не связаны с работающими контейнерами:
docker network prune
При выполнении команды вам будет предложено подтвердить удаление. Все неиспользуемые сети, такие как br-53137d23117b
, будут удалены, если к ним не подключены контейнеры.
Чтобы увидеть список всех сетей, используйте:
docker network ls
Это позволит вам убедиться, какие сети в данный момент используются.
Если вы хотите удалить конкретный интерфейс, который не используется, и у вас есть идентификатор сети (например, br-53137d23117b
), вы можете использовать следующую команду:
docker network rm br-53137d23117b
Эта команда удалит только указанную сеть.
Если вы видите сетевые интерфейсы, которые не относятся к Docker (например, br-53137d23117b
, который находится в состоянии DOWN), и вы уверены, что они не используются, вы можете удалить их с помощью команды ip link delete
:
sudo ip link delete br-53137d23117b
Если интерфейсы, такие как vetha77efc1
, остались от контейнеров, которые вы уже удалили, они могут быть удалены автоматически при следующем запуске Docker или с помощью команды:
docker container prune
Это удалит все остановленные контейнеры, что также может освободить висячие интерфейсы.
После выполнения этих команд вы можете снова проверить сетевые интерфейсы с помощью:
ip a
Это позволит вам убедиться, что неиспользуемые интерфейсы были успешно удалены.
ОШИБКИ
exited with code 0
- корректное завершение работы контейнера.
Параметры ниже буду дополнять по мере свободного времени. Если хотите поддержать меня и ускорить процесс наполнения, поддержите 20 минтами этой статьи.
ШПАРГАЛКА.
Команда docker: опции, ключи и примеры использования docker
Команда docker-ps: опции, ключи и примеры использования docker ps
Команда docker-logs: опции, ключи и примеры использования docker logs
Команда docker-login: опции, ключи и примеры использования docker login
Команда docker-inspect: опции, ключи и примеры использования docker inspect
Команда docker-exec: опции, ключи и примеры использования docker exec
Команда docker-cp: опции, ключи и примеры использования docker cp
Команда docker-container: опции, ключи и примеры использования docker container
Команда docker-compose \ docker compose: опции, ключи и примеры использования docker-compose
Команда docker-commit: опции, ключи и примеры использования docker commit
Команда docker-build: опции, ключи и примеры использования docker build
Опция --restart
no
— контейнер не будет перезапускаться (значение по умолчанию). Подходит для контейнеров, которые не требуют перезапуска после завершения работы.
on-failure
— контейнер перезапустится только при ошибках (не нулевом статусе завершения). Когда нужно перезапускать контейнеры только в случае ошибок (не успешного завершения работы), чтобы предотвратить бесполезные перезапуски при нормальной остановке.
always
— контейнер всегда будет перезапускаться, независимо от причины его остановки. Когда контейнер должен всегда работать, независимо от того, был ли он остановлен.
unless-stopped
— контейнер будет перезапускаться, пока его явно не остановят. Когда контейнер должен автоматически перезапускаться после сбоя, но не перезапускаться после того, как он был остановлен вручную.
Для docker
Контейнер запускается с нуля:
docker run --restart=always <другие параметры запуска> <имя_образа>
Обновление уже запущенного контейнера
docker update --restart=always <container_id>
Для docker компоус
restart: on-failure
: контейнер будет перезапущен только в случае ошибки (например, если контейнер завершится с ненулевым кодом выхода).
restart: unless-stopped
: контейнер будет перезапущен в случае сбоя или перезагрузки системы, но не перезапустится, если вы его вручную остановите.
Загрузить нужную версию образа Grafana с Docker Hub. 11.2.3
- это tag
(указывает на нужную версию). Без указания tag
, автоматически должна загружаться latest
docker pull grafana/grafana:11.2.3
Переименовать образ с тегом grafana:11.2.3
на тег grafana:latest
, при этом не отображался тег 11.2.3
:
Шаг 1: Тегирование образа с тегом latest
. Создать новый тег для образа grafana:11.2.3
как grafana:latest
. Эта команда создаст новый тег для того же образа, но теперь он будет доступен как grafana:latest
docker tag grafana/grafana:11.2.3 grafana/grafana:latest
Шаг 2: Удалить старый тег grafana:11.2.3
. После того как создан новый тег для образа, можно удалить старый тег 11.2.3
. Эта команда удалит тег 1.21
из локального репозитория Docker, но сам образ останется, так как он теперь имеет тег latest
:
docker rmi grafana/grafana:11.2.3
version: '3.8'
services:
elixir-validator:
image: elixirprotocol/validator:latest
container_name: elixir
platform: linux/amd64
env_file:
- /absolute/path/to/validator.env
restart: unless-stopped # Автоматический перезапуск контейнера
ports:
- "17690:17690" # Метрики и проверка состояния
healthcheck: # Проверка состояния контейнера
test: ["CMD", "curl", "-f", "http://localhost:17690/health"]
interval: 30s
timeout: 10s
retries: 5
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
volumes:
- /path/to/host/logs:/var/lib/docker/containers
networks:
- elixir-network
networks:
elixir-network:
driver: bridge
pull_policy
(Политика получения образов). Этот параметр указывает, как Docker должен управлять образами при запуске контейнеров. always
: образ всегда будет перезапрашиваться с Docker Hub (или другого реестра), даже если он уже есть локально. never
: использует только локально доступные образы. Если образ отсутствует, контейнер не запустится. if-not-present
(по умолчанию): образ загружается только в случае отсутствия локальной копии.
pull_policy
не является стандартным для Docker Compose версии 3.x (и ранее). Он поддерживается только в Docker Compose V2 для некоторых специфичных настроек.
platform: linux/amd64
— указывает Docker, что для этого контейнера нужно использовать архитектуру linux/amd64
, то есть x86_64
. Это может быть полезно, если вы работаете в среде с многоархитектурной поддержкой, например, на сервере с архитектурой ARM, но вам нужно запустить образ для x86_64
.
Если ваша система и образ совпадают по архитектуре, то platform
не обязательно указывать. Docker автоматически подберет нужную архитектуру.
/absolute/path/to/validator.env
- абсолютный путь к файлу переменных окружения.
Опция --restart
: no
— контейнер не будет перезапускаться (значение по умолчанию). Подходит для контейнеров, которые не требуют перезапуска после завершения работы. on-failure
— контейнер перезапустится только при ошибках (не нулевом статусе завершения). Когда нужно перезапускать контейнеры только в случае ошибок (не успешного завершения работы), чтобы предотвратить бесполезные перезапуски при нормальной остановке. always
— контейнер всегда будет перезапускаться, независимо от причины его остановки. Когда контейнер должен всегда работать, независимо от того, был ли он остановлен. unless-stopped
— контейнер будет перезапускаться, пока его явно не остановят. Когда контейнер должен автоматически перезапускаться после сбоя, но не перезапускаться после того, как он был остановлен вручную.
/path/to/host/logs:/var/lib/docker/containers
- /path/to/host/logs
— папка на хосте, где будут храниться логи. /var/lib/docker/containers
— путь внутри контейнера, где Docker по умолчанию
networks
в секции services
- контейнер будет подключен к пользовательской сети с именем elixir-network
. Если сеть с именем elixir-network
уже создана (вручную или другим Docker Compose проектом), Docker не создаст новую сеть. Вместо этого контейнеры будут подключены к существующей сети elixir-network
.
networks
на верхнем уровне - здесь определяется сеть с именем elixir-network
, которая будет использовать драйвер bridge
(это тип сети, предоставляющий изолированную среду для контейнеров. Контейнеры внутри этой сети могут общаться между собой напрямую через IP-адреса или имена сервисов).
Спасибо за внимание к материалу! Надеюсь, информация оказалась полезной для вас! Поздравляю с новым достижением!
Если материал оказался полезным и вы хотите поддержать мою работу, буду рад вашему донату. Любая помощь вдохновляет на создание нового контента! Спасибо за вашу поддержку!
ПОЛЕЗНЫЕ ССЫЛКИ
В этом ОГЛАВЛЕНИИ собраны и структурированы все материалы.
About & Contact || Услуги || Donate || Отказ от ответственности | ©