Neonode.cc - Mind space blog
open main menu
Part of series: networking

Как настроить сеть IPv6 в Docker и Docker Compose

/ 3 min read

Настройка сети IPv6 в Docker и Docker Compose

С ростом интернет-устройств и увеличением количества подключений, IPv6 становится всё более актуальным. В этой статье я покажу, как включить поддержку IPv6 в Docker и Docker Compose, чтобы обеспечить масштабируемость и подготовить инфраструктуру к будущим требованиям сети.

Почему стоит использовать IPv6?

IPv4 изначально был ограничен 32-битным адресным пространством, что приводит к нехватке доступных адресов. IPv6 решает эту проблему, предлагая 128-битное адресное пространство. Использование IPv6 в контейнерной инфраструктуре даёт следующие преимущества:

  • Масштабируемость: огромное количество адресов.
  • Простота маршрутизации: улучшенная структура для агрегации адресов.
  • Будущая совместимость: интернет постепенно переходит на IPv6, и ваше приложение должно быть готово.

Включение поддержки IPv6 в Docker

Для начала нужно включить поддержку IPv6 в Docker. По умолчанию Docker работает только с IPv4, поэтому нужно внести изменения в конфигурацию.

Шаг 1: Настройка конфигурации Docker

  1. Откройте или создайте файл конфигурации Docker daemon.json:
sudo nano /etc/docker/daemon.json
  1. Добавьте следующие строки:
{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:abc1::/64"
}

Параметр "ipv6": true активирует поддержку IPv6, а "fixed-cidr-v6" задаёт подсеть IPv6, которая будет использоваться сетью Docker.

Шаг 2: Перезапуск Docker

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

sudo systemctl restart docker

Шаг 3: Проверка сети

Убедитесь, что сеть с поддержкой IPv6 была создана успешно. Выполните:

docker network ls

Затем проверьте конфигурацию сети:

docker network inspect bridge

Вы должны увидеть вашу подсеть IPv6 и шлюз.


Создание контейнера с поддержкой IPv6

Теперь, когда Docker поддерживает IPv6, можно создавать контейнеры с этой поддержкой.

Шаг 1: Запуск контейнера

Запустите контейнер с поддержкой IPv6:

docker run -di --name alpine6 alpine

Шаг 2: Проверка адресов

Проверьте, что контейнер имеет как IPv4, так и IPv6 адреса:

docker exec alpine6 ip a

Шаг 3: Пинг шлюза

Убедитесь, что контейнер может взаимодействовать с сетью через IPv6:

docker exec alpine6 ping6 2001:db8:abc1::1

Создание пользовательской сети с IPv6

Шаг 1: Создание сети

Для продакшн сред лучше создать свою сеть:

docker network create --ipv6 --subnet="2001:db8:1::/64" --gateway="2001:db8:1::1" my-net

Шаг 2: Присоединение контейнера

Присоедините контейнер к пользовательской сети:

docker run -di --name alpine_custom --network my-net alpine

Настройка сети IPv6 с Docker Compose

Docker Compose — мощный инструмент для управления многоконтейнерными приложениями. Мы также можем настроить поддержку IPv6 через Compose.

Пример 1: Использование существующей сети

  1. Сначала создайте сеть через командную строку:
docker network create --ipv6 --subnet="2001:db8:1::/64" --gateway="2001:db8:1::1" mynetv6
  1. Теперь создайте docker-compose.yml, который будет использовать эту сеть:
services:
  app:
    image: alpine:latest
    command: ping6 -c 4 2001:db8:1::1
    networks:
      - mynetv6
networks:
  mynetv6:
    external: true
  1. Запустите Compose:
docker compose up

Пример 2: Создание сети и контейнера через Docker Compose

Другой подход — полностью управлять сетью через Compose:

services:
  app:
    image: alpine:latest
    command: ping6 -c 4 2001:db8:a::1
    networks:
      - custom_net
networks:
  custom_net:
    enable_ipv6: true
    ipam:
      config:
        - subnet: 2001:db8:a::/64
          gateway: 2001:db8:a::1

Запустите:

docker compose up

Этот файл создаст новую сеть с поддержкой IPv6 и запустит контейнер.


Заключение

IPv6 становится всё более важным компонентом современной сетевой инфраструктуры. Теперь вы знаете, как включить поддержку IPv6 в Docker и Docker Compose, что позволит вам создать масштабируемую и современную инфраструктуру для ваших приложений. Регулярно тестируйте настройки сети, чтобы удостовериться в правильной работе контейнеров с протоколом IPv6.