Подробное объяснение сетевого режима Docker и сетевой связи между контейнерами.
Подробное объяснение сетевого режима Docker и сетевой связи между контейнерами.

1. Введение

Сам Docker в зачаточном состоянии,Есть свой драйвер,ВызовContainer Network Manager,аббревиатураCNM。Это само по себеCNMБудет поддерживать несколько режимов,В этом разделе давайте рассмотрим различия между этими режимами.,Затем пойди и узнай,Сделать контейнер действительно хорошей Конфигурация,Позвольте контейнеру действительно имитировать виртуальную машину,Какую конфигурацию мы в конечном итоге делаем.

2. Сетевой режим

2.1 Режим сети с одним хостом

Установить Docker В будущем по умолчанию будут созданы три типа сетей, которые можно будет docker network ls Проверять.

Язык кода:javascript
копировать
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
688d1970f72e        bridge              bridge              local
885da101da7d        host                host                local
f4f1b3cf1b7f        none                null                local

Прежде чем изучать сеть Docker, нам нужно сначала понять, что означают эти сетевые режимы.

сетевой режим

Введение

Bridge

Выделите и установите IP-адрес для каждого контейнера, используйте мост Linux и iptables для обеспечения соединения контейнеров. Docker создает мост с именем docker на каждом хосте и соединяет каждую конечную точку хоста через пару veth. По умолчанию используется модель.

Host

Контейнер не будет виртуализировать собственную сетевую карту, настраивать собственный IP и т. д., а будет использовать IP и порт хоста.

None

Контейнер имеет независимое сетевое пространство имен, но для него не выполняются сетевые настройки. Пользователям необходимо выполнить настройку сети, выполнив команду docker network.

Container

Вновь созданный контейнер не будет создавать собственную сетевую карту и настраивать собственный IP-адрес, но будет использовать IP-адрес, диапазон портов и т. д. совместно с указанным контейнером.

2.2 Режим межхостовой сети

2.2.1 Overlay(libnetwork, libkv)
  • осуществить реализацию пакета

Приведите пример:Просто когдаконтейнерпублично заявитьизпакет,Когда от Хозяин хочет передать из,Затем запечатайте слой здесь, в Хозяине. Он добавляет некоторую дополнительную информацию к исходному пакету данных.,Например, различные протоколы в ходе добавляют слой заголовков. Тогда этот клуб Баотоу,поставь текущийиз Хозяинадрескак оригиналадрес,Положите противоположный конециз Хозяинадрескак цельадрес。Хорошо упакованоизпакет,Просто в инфраструктурной сети,Переведено. Затем, после того как этот пакет прибудет на противоположный конец, Хозяин,Идет еще один процесс распаковки,Это разархивирование внешнего Хозяин-слоя пакетов данных.,Внутри остается только заголовок пакета данных контейнеризации. Таким образом, этот пакет,Его можно передать на противоположный конец. Эта технология распаковки пакетов называется Overlay.

2.2.2 Underlay
  • использовать существующую базовую сеть для каждого контейнера. Конфигурация маршрутизируемого IP-адреса.

Приведите пример:Underlayэто яизконтейнерсетьи Хозяинсеть Это то же самоеиз。яконтейнеризIPДуан Цзай Хозяин Мы также знаем, как проложить маршрут здесьиз,Знать, как маршрутизировать на уровне инфраструктуры. Итак, в этом случае мой пакет данных может быть передан свободно. Каковы его ограничения? Просто потому что я изконтейнерсетии Хозяинсеть поделюсь,Но контейнер потребляет много IP. Итак, вот оно,Если вы хотите использовать Underlayсеть,Тогда вам нужно хорошо спланировать сеть,Например, насколько велик IP и сегмент сети выделен контейнеру.,Сколько сегментов сети выделено для инфраструктуры. Тогда будут относительно высокие требования к планированию ИП.

3. нет сетевого режима

  • none сетевой режим означает отключение функции сети, только lo интерфейс,local из аббревиатуры, обозначающей 127.0.0.1,Прямо сейчас localhost местный шлейфинтерфейс。существоватьсоздаватьконтейнерчаспроходитьпараметр --net none или --network none обозначение;
  • none сетевой режим означает не Docker Container создавать любую среду изсети, интерьер контейнера можно использовать только loopback сетевое устройство, других ресурсов не будет. Можно сказать none Режим Docke Container Настроек сделано очень мало, но как говорится "меньше да лучше", при отсутствии сетевой Конфигурации, т.к. Docker На этой основе разработчики могут создавать бесконечное количество других возможностей для индивидуальной разработки. Это также отражает Docker Концепция дизайна открытая.

Например, я основываюсь на none сетевой режим Созданный а на основе nginx Контейнеры, созданные из изображенийи названn1

мы можем пройти docker network inspect none Посмотреть все none сетевой режим Внизизконтейнер,существовать Containers Имя контейнера можно увидеть в файле node.

Далее давайте рассмотрим процесс мостового соединения сети Docker.,Потому что у нас уже есть докер,янам нужен УстановитьLinuxизbrctlЗаказ:

Язык кода:javascript
копировать
apt install bridge-utils # Установитьbrctl

использоватьbrctlтакиз Заказ Приходить Проверять Виртуальный Ethernet-мост docker0,проходитьbrctl showямы можем видетьприезжать。

С таким оборудованием,На самом деле, нам очень просто обеспечить интероперабельность между Изеть и Хозяин в контейнериз, не так ли? Мы первые в этом контейнере Конфигурациясеть,Во-вторых, вытащите нитку для этого контейнеризсета,приезжать Хозяинизnamespace,и И вставьтесуществоватьэтотBridge,DockerвизBridgeвыше。Что Что?такизразговаривать Хозяинсетьиконтейнерсеть Фактически, совместимость может быть достигнутаизтакодин Цель。ловить Вниз Приходить,я Давайте реализуем это вручную шаг за шагом.создаватьодинсетьпространство имен(network namespace),и Воляодин Нетсетевой режимиз Nginx Docker Контейнер подключается к нему, а сеть настраивается так, чтобы контейнер мог получить доступ к внешней сети.

Сначала создайте сетевое пространство имен:

Язык кода:javascript
копировать
mkdir -p /var/run/netns Каталог #создавать используется для сохранения информации о процессах, связанных с пространством имен сети.

Далее начните Nginx Docker контейнер(никтосетевой режим):

Язык кода:javascript
копировать
docker run --network=none -d nginx

Проверьте PID процесса контейнера:

Язык кода:javascript
копировать
docker ps|grep nginx 
docker inspect контейнерID |grep -i pid

Импортируйте PID в переменные среды:

Язык кода:javascript
копировать
export pid=18149

Проверьте конфигурацию сети контейнера:

Язык кода:javascript
копировать
nsenter -t 18149 -n ip a

использовать nsenterЗаказ Входитьконтейнеризсетьпространство имен,и Проверять IP Конфигурация адреса. Вот 18149 Это контейнер PID。

Свяжите пространство имен сети с контейнером:

Язык кода:javascript
копировать
ln -s /proc/$pid/ns/net /var/run/netns/$pid # Мягкое соединение создает связывающие отношения между процессом контейнера и сетью.
ip netns list # Перечислить все пространства имен сети

Вы можете увидеть PID переменной среды, которую мы только что импортировали.

Создайте пару Veth:

Язык кода:javascript
копировать
ip link add A type veth peer name B

При этом создается пара виртуальных интерфейсов Ethernet (veths), A и B, которые соединяют два сетевых пространства имен, как один сетевой кабель.

Настройте один конец пары veth (A):

Язык кода:javascript
копировать
brctl addif docker0 A
ip link set A up

Добавьте интерфейс A в мост Docker и активируйте его.

Установите переменные среды:

Язык кода:javascript
копировать
SETIP=172.17.0.10  # Эта переменная определяет контейнеринтерфейсинтерфейс. IP адрес
SETMASK=16  # маска подсети контейнереинтерфейсиз, вот она 16, соответствующее десятичное значение равно 256, то есть 255.255.0.0
GATEWAY=172.17.0.1 # Шлюз контейнериздефолт определен, вот он 172.17.0.1

Настройте другой конец пары Veth (B):

Язык кода:javascript
копировать
ip link set B netns $pid # Воля по имени `B` из veth интерфейс установлен пользователем `$pid` Указывает пространство имен изконтейнеризсет. `Б` да предзаказ veth С другой стороны, теперь Воля была перемещена в пространство имен контейнеризсет, так что она находится внутри контейнера.
ip netns exec $pid ip link set dev B name eth0 # Эта команда выполняется внутри пространства имен контейнеризсет, которое veth интерфейс `B` Переименовать в `eth0`. Это сделано для того, чтобы внутреннее именование контейнера соответствовало традиционному методу именования «исетьинтерфейс», а также для того, чтобы его было легче понять и использовать.
ip netns exec $pid ip link set eth0 up # Эта команда активирует переименованный `eth0` Включите его, чтобы он мог отправлять и получать трафик.
ip netns exec $pid ip addr add$SETIP/$SETMASK dev eth0 # Эта команда `eth0` интерфейс назначить IP адрес и маска подсети. `$SETIP` и `$SETMASK` предварительно определены из переменных, представляющих соответственно IP адрес и маска подсети. Таким образом, контейнер имеет эффективное IP адрес,Может участвовать в сетевом общении.
ip netns exec $pid ip route add default via$GATEWAY # Эта Контейнер Установите шлюз по умолчанию. `$GATEWAY` даранее определенныйизпеременная,представлятьконтейнериз Шлюз по умолчаниюадрес。так,Когда контейнеру необходимо отправить данные в непрямое соединение,Он будет использовать шлюз по умолчанию для маршрутизации.

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

Проверьте подключение:

Язык кода:javascript
копировать
curl 172.17.0.10

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

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

4. Режим мостовой сети

В этом режиме Докер Демон создает виртуальный Ethernet-мост. docker0,Новый изконтейнер автоматически подключится к этому интерфейсу.,Подключенные к нему пакеты данных могут автоматически пересылаться между любыми сетевыми картами.

По умолчанию демон создает пару одноранговых интерфейсов виртуальных устройств. veth pair,Воля Чтосерединаодининтерфейсустановлен наконтейнериз eth0 интерфейс (сетевая карта контейнера), а другой интерфейс размещается в пространстве имен хоста, аналогично vethxxx Такое наименование подключает все контейнеры на хосте к этой внутренней сети.

Например, если я запускаю nginx Контейнеры, созданные из изображений n01,Проверять ip addr

Благодаря приведенному выше сравнению мы можем обнаружить, что сказанное ранее подтверждается: процесс-демон создаст пару одноранговых интерфейсов виртуальных устройств. veth pair,Воля Чтосерединаодининтерфейсустановлен наконтейнериз eth0 интерфейс (сетевая карта контейнера), а другой интерфейс размещается в пространстве имен хоста, аналогично vethxxx Назван так.

В то же время демон также будет docker0 Выделите один в частном адресном пространстве IP Укажите адрес и подсеть контейнеру и установите docker0 из IP адресдляконтейнериз Шлюз по умолчанию。проходить brctl show команда для просмотра информации о мосте.

За каждый контейнериз IP адрес и Gateway Информация, мы можем пройти docker inspect Имя контейнера|ID Для просмотра в NetworkSettings Подробную информацию можно увидеть в узле.

мы можем пройти docker network inspect bridge Посмотреть все bridge сетевой режим Внизизконтейнер,существовать Containers Имя контейнера можно увидеть в файле node.

о bridge сетевой режимизиспользовать,Просто нужносуществоватьсоздаватьконтейнерчаспроходитьпараметр --net bridge или --network bridge Просто уточните, конечно это тоже по умолчанию режим, то есть этот параметр можно опустить.

Основные шаги по реализации режима Bridge следующие:

  • Docker Daemon использовать veth pair Технология: пара одноранговых устройств виртуального сетевого интерфейса на хосте Хозяинсоздавать, предполагая veth0 и veth1。и veth pair Технические характеристики могут гарантировать, что независимо от того, какой veth После получения сообщения сеть передаст сообщение «Воля» другой стороне.
  • Docker Daemon Воля veth0 добавить к Docker Daemon создаватьиз docker0 на мосту. Гарантируется, что сообщение Хозяинизсеть может быть отправлено на veth0
  • Docker Daemon Воля veth1 добавить в Docker Container Принадлежностьиз namespace вниз и был переименован eth0。Таким образом,гостиница Хозяинизсеть Если сообщение отправлено на veth0,Тогда встаньте Прямо сейчасбудет Container из eth0 Прими, осознай приход Хозяина Docker Container отсутствие возможности подключения к сети, в то же время оно еще и обеспечивает; Docker Container одиниспользовать eth0,Добиться контейнерсеть среду из изоляции.  

5. Режим хост-сети

  • host сетевой режимнуждатьсясуществоватьсоздаватьконтейнерчаспроходитьпараметр --net host или --network host обозначение;
  • использовать host сетевой режимиз Docker Container,может быть напрямуюиспользоватьгостиница Хозяиниз IP адресс внешним миромкоммуникация,нравитьсягостиница Хозяиниз eth0 является общественным IP, то контейнеру тоже принадлежит этот паблик ИП. При этом сервисный порт в контейнере также можно подключить к порту Хозяиниз без дополнительных действий. NAT конверсия;
  • host сетевой режим позволяет контейнеру совместно использовать стек хоста Хозяинсеть, поэтому преимущество состоит в том, что внешний Хозяин напрямую взаимодействует с контейнером, но это контейнерсету не хватает изоляции.

Например, я основываюсь на host сетевой режим Созданный а на основе busybox Контейнеры, созданные из изображений bbox02,Проверять ip addr

Затем хозяин проходит ip addr Просмотрите информацию следующим образом:

мы можем пройти docker network inspect host Посмотреть все host сетевой режим Внизизконтейнер,существовать Containers Имя контейнера можно увидеть в файле node.

/resources/articles/docker/image-20200818124047216.png
/resources/articles/docker/image-20200818124047216.png

6. Режим контейнерной сети

  • Container сетевой режимда Docker Один из наиболее специальных режимов изсетьиз. ввести параметры в создательконтейнер --net контейнер: работает из Имя контейнера|ID или --network контейнер: работает из Имя контейнера|ID обозначение;
  • В этом режиме из Docker контейнер будет использовать общий сетевой стек, так что два контейнера смогут использовать localhost Эффективное и быстрое общение.

Container сетевой режим новыйсоздаватьизконтейнер не будет создавать самоконфигурацию IP, но и назначенный изконтейнер IP, диапазон портов и т. д.。Те же дваконтейнер Кромесеть Кроме того же самого,Другие, такие как файловые системы, списки процессов и т. д., по-прежнему изолированы.

Например, я основываюсь наконтейнер bbox01 Созданный container сетевой режимизконтейнер bbox04,Проверять ip addr

контейнер bbox01 из ip addr Информация следующая:

гостиница Хозяиниз ip addr Информация следующая:

С помощью приведенных выше тестов можно обнаружить, что Docker Демон имеет только одну пару одноранговых виртуальных устройств для подключения. bbox01 контейнеригостиница Хозяин,И контейнер bbox04 будет напрямую использовать информацию веб-сайт контейнера bbox01.

В это время, если bbox01 контейнер остановись и ты найдешь bbox04 контейнер - это все, что осталось lo интерфейс.

Затем bbox01 контейнер После перезапуска Контейнер bbox04 также перезапустите его,Вы можете снова получить информацию о сетевой карте.

7. Пользовательская сеть

Docker Предоставить сетьиспользовать по умолчанию относительно просто, но для обеспечения безопасности применения в каждом контейнере в реальной разработке рекомендуется настроить изсет для управления контейнером и разрешить имя контейнера IP адресизавтоматический DNS разобрать.

от Docker 1.10 Версия запускается, докер daemon Реализован встроенный из DNS сервер, чтобы контейнер мог напрямую взаимодействовать с именем передаваемогоконтейнера. Метод очень простой, просто сделайте это, когда создадитеконтейнериспользовать. --name Просто дайте ему имя. нодаиспользовать Docker DNS Существует предел:может быть только user-defined сетьсерединаиспользовать。То естьдаобъяснять,по умолчаниюиз bridge сетьданикто Закониспользовать DNS из, поэтому нам нужно настроить сеть.

7.1 Создайте сеть

проходить docker network create Команды могут быть настроены по сети режим, командная строка выглядит следующим образом:

Посмотреть дальше docker network create Команда Использовать детали, найти можно --driver обозначениесетевой режим и по умолчанию bridge сетевой режиме, подсказка такая:

Создать на основе bridge сетевой режимиз Настроитьсетевой режим custom_network,Полная команда выглядит следующим образом:

Язык кода:javascript
копировать
docker network create custom_network

проходить docker network ls Проверятьсетевой режим:

Язык кода:javascript
копировать
[root@localhost ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
b3634bbd8943        bridge              bridge              local
062082493d3a        custom_network      bridge              local
885da101da7d        host                host                local
f4f1b3cf1b7f        none                null                local

проходить Настроитьсетевой режим custom_network создаватьконтейнер:

Язык кода:javascript
копировать
docker run -di --name bbox05 --net custom_network busybox

проходить docker inspect Имя контейнера|ID Посмотреть информацию о контейнеризсете можно на NetworkSettings Подробную информацию можно увидеть в узле.

7.2 Подключитесь к Интернету

проходить docker network connect имя сети контейнеримя Подключите новую изсетевую систему для контейнера режим。

Язык кода:javascript
копировать
docker network connect bridge bbox05

проходить docker inspect Имя контейнера|ID Еще раз проверьте информацию о контейнере и добавьте значение по умолчанию. bridge

7.3 Отключение от сети

проходить docker network disconnect имя сети контейнеримя Команда отключения от сети.

Язык кода:javascript
копировать
docker network disconnect custom_network bbox05

проходить docker inspect Имя контейнера|ID Проверьте информацию о контейнере еще раз и обнаружите, что осталось только значение по умолчанию. bridge

7.4 Удаление сети

Можетпроходить docker network rm имя сети Команда для удаления пользовательской сети режим,сетевой режим Если удаление пройдет успешно, сеть будет возвращена. режимимя。

Язык кода:javascript
копировать
docker network rm custom_network

ПРИМЕЧАНИЕ. Если используется пользовательская сеть режим Созданныйконтейнер,тогдасетевой режимникто Законудалить.

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

Далее мы реализуем связь между контейнером и изсетом на основе полученных знаний. Прежде всего, проясните,контейнеры должны сообщаться друг с другом,Должны быть сетевые карты, принадлежащие одной сетииз.

Начнем с двух значений по умолчанию, основанных на bridge сетевой режимизконтейнер。

Язык кода:javascript
копировать
docker run -di --name default_bbox01 busybox
docker run -di --name default_bbox02 busybox

проходить docker network inspect bridge Посмотреть два конкретных контейнера IP информация.

Затем проверьте, может ли осуществляться связь между двумя контейнерами.

проверено,В результате два человека, принадлежащие к одной сетиизконтейнер, могут общаться в сетииз,нода IP адресвозможныйда Не исправленоиз,Произошли изменения,Чтоконтейнер Все внутрикоммуникацияиз IP адрес тоже надо поменять,Могу ли я связаться с именем использоватьконтейнер? Продолжайте тестирование.

/resources/articles/docker/image-20200818142849899.png
/resources/articles/docker/image-20200818142849899.png

проверено,в результате не возможно связаться с использованиемконтейнериз,Итак, как реализовать эту функцию?

от Docker 1.10 Версия запускается, докер daemon Реализован встроенный из DNS сервер, чтобы контейнер мог напрямую взаимодействовать с именем передаваемогоконтейнера. Метод очень простой, просто сделайте это, когда создадитеконтейнериспользовать. --name Просто дайте ему имя.

нодаиспользовать Docker DNS Существует предел:может быть только user-defined сетьсерединаиспользовать。То естьдаобъяснять,по умолчаниюиз bridge сетьданикто Закониспользовать DNS из, поэтому нам нужно настроить сеть.

Сначала мы основываемся на bridge сетевой режимсоздавать Настроитьсеть custom_network,Затемсоздавать два на основе пользовательского сетевого режимаизконтейнера.

Язык кода:javascript
копировать
docker run -di --name custom_bbox01 --net custom_network busybox
docker run -di --name custom_bbox02 --net custom_network busybox

проходить docker network inspect custom_network Посмотреть два конкретных контейнера IP информация.

/resources/articles/docker/image-20200818143417653.png
/resources/articles/docker/image-20200818143417653.png

Затем проверяется, может ли сетевая связь осуществляться между двумя контейнерами, и соответственно использовать определенное IP-имя иконтейнера для сетевой связи.

проверено,В результате два человека, принадлежащие к одной пользовательской сетиизконтейнера, могут общаться в сетииз,А общаться можно под именем «использоватьконтейнер».

Тогда, если в это время я надеюсь bridge сеть Внизизконтейнер Можети custom_network Как запустить сеть под изконтейнер? На самом деле ответ очень прост: пусть bridge сеть Внизизконтейнер Подключайтесь к новым из custom_network Просто сеть.

Язык кода:javascript
копировать
docker network connect custom_network default_bbox01
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose