Использование Dockerfile для открытия портов

Using Dockerfile Expose Ports



Создать собственный образ Docker из существующих образов Docker очень просто, используя Dockerfile . Обычно люди используют минимальное базовое изображение, такое как альпийский или убунту / дебиан для этой цели. Допустим, вы хотите создать собственный Docker-образ своего любимого веб-приложения, написанного на NodeJS. Приложение будет работать через порт 8080 . По умолчанию вы не сможете получить доступ к веб-приложению через порт 8080 с вашего хост-компьютера. Вам нужно будет сообщить Docker, что вы хотите открыть или открыть порт 8080 чтобы иметь доступ к нему с вашего хост-компьютера.

В этой статье я покажу вам, как открывать порты с помощью Dockerfile с примером из реального мира. Давайте начнем.







Во-первых, нам нужно создать каталог проекта. В этом каталоге вы должны хранить все файлы проекта и Dockerfile .



Выполните следующую команду, чтобы создать каталог проекта myapp / в вашем каталоге пользователей HOME и перейдите к нему:



$mkdir~/myapp&& CD~/myapp

Подготовка веб-приложения:

Теперь создайте каталог src / внутри ~ / myapp / каталог с помощью следующей команды:

$mkdirsrc

в src / каталог, весь исходный код моего приложения NodeJS будет сохранен.

Я просто создам простой app.js файл в src / каталог и запустить простой веб-сервер на порту 8080 просто для демонстрации.

В src / app.js файл содержит следующие строки кодов:

Написание Dockerfile и открытие портов:

Теперь создайте Dockerfile в ~ / myapp каталог с помощью следующей команды:

$трогатьDockerfile

Теперь введите следующие строки в Dockerfile и сохраните его. Я расскажу, что означают эти строки, позже.

Здесь, ОТ альпийских: 3,8 значит, используйте альпийский: 3,8 Образ Docker в качестве основы для нового образа, который мы будем строить из этого Dockerfile .

ЗАПУСТИТЬ apk обновление означает, запустить apk обновление команда в базовом образе Docker альпийский: 3,8 .

RUN apk add –no-cache nodejs означает, запустить apk добавить команда для установки языка программирования NodeJS в альпийский: 3,8 Базовый образ Docker.

КОПИРОВАТЬ ./src / app означает, что скопируйте все файлы из ~ / myapp / src каталог в /приложение каталог нового образа Docker, который мы создадим с помощью Dockerfile .

CMD [/ usr / bin / node, /app/app.js] означает, запустить /app/app.js файл из нового контейнера, используя узел двоичный файл, расположенный в / usr / bin / узел .

Наконец, чтобы EXPOSE 8080 / tcp означает, выставить или открыть порт TCP 8080 к главному компьютеру.

Создание собственного образа Docker с помощью Dockerfile:

Теперь давайте создадим собственный образ Docker. альпийский узел: v1 с помощью Dockerfile что мы только что создали.

Сначала убедитесь, что вы в ~ / myapp / каталог, а затем выполните следующую команду, чтобы создать собственный образ Docker альпийский узел: v1 :

$сборка докеров-tальпийский узел: v1.

Как видите, кастомный образ Docker альпийский узел: v1 создается. Требуемый базовый образ Docker и пакеты извлекаются из Интернета.

Как видите, кастомный образ Docker альпийский узел: v1 создан успешно.

Тестирование собственного образа Docker:

Теперь мы можем протестировать собственный образ Docker. альпийский узел: v1 очень легко. Все, что нам нужно сделать, это создать контейнер из альпийский узел: v1 изображение.

Выполните следующую команду, чтобы создать контейнер Docker www от альпийский узел: v1 Образ Docker:

$докер запустить-d -Это --имяwww alpine-node: v1

Контейнер www создано.

Теперь давайте узнаем IP-адрес www Контейнер Docker с помощью следующей команды:

$докер проверить www| рукояткаАдрес

Как видите, в моем случае IP-адрес 172.17.0.3 . Итак, приложение NodeJS, которое я написал, должно быть доступно из веб-браузера через порт 8080 этого IP-адреса.

Вуаля! Я могу получить доступ к порту 8080 моего www Контейнер Docker.

В основном это то, как вы предоставляете определенные порты в своих пользовательских образах Docker, которые вы будете создавать с помощью Dockerfile .

Открытие портов TCP и UDP с помощью Dockerfile:

В предыдущем разделе этой статьи я показал вам, как открыть TCP-порт с помощью Dockerfile .

Вы можете легко открыть TCP-порт (скажем, TCP-порт 53 ) в вашей Dockerfile со следующей строкой:

РАЗОБЛАЧАТЬ53/TCP

Вы также можете открыть порт UDP (скажем, порт UDP 53 ) со следующей строкой в ​​вашем Dockerfile :

РАЗОБЛАЧАТЬ53/udp

Вы можете открыть порт TCP и UDP одновременно с помощью следующих строк в вашем Dockerfile :

РАЗОБЛАЧАТЬ53/TCP
РАЗОБЛАЧАТЬ53/udp

Если вы не укажете, какой протокол (TCP или UDP) использовать, по умолчанию будет использоваться TCP. Например, если вы напишете следующую строку в своем Dockerfile :

РАЗОБЛАЧАТЬ53

Тогда Docker предположит, что вы хотите использовать TCP-порт 53.

Открытие нескольких портов с помощью Dockerfile:

Допустим, вы хотите создать собственный образ Docker для стека MEAN. В этом случае вы будете запускать HTTP-сервер на каком-то порту (скажем, TCP-порт 80 или 8080), FTP-сервер, который работает на TCP-порту 21, сервер базы данных SQL (скажем, MySQL), который работает на TCP-порту 3306, или сервер базы данных NoSQL (скажем, MongoDB), который работает на TCP-порту 27017 или 27018, SSH-сервер, который работает на TCP-порту 22. Это много портов!

Хорошие новости: вы можете выставить столько портов, сколько нужно в вашем собственном образе Docker, созданном с помощью Dockerfile .

Порты в приведенном выше примере могут быть представлены следующими строками в вашем Dockerfile :

РАЗОБЛАЧАТЬ80/TCP
РАЗОБЛАЧАТЬ8080/TCP
РАЗОБЛАЧАТЬ21/TCP
РАЗОБЛАЧАТЬ22/TCP
РАЗОБЛАЧАТЬ3306/TCP
РАЗОБЛАЧАТЬ27017/TCP
РАЗОБЛАЧАТЬ27018/TCP

При желании вы можете оставить спецификацию протокола, поскольку Docker по умолчанию использует TCP, и проделать то же самое со следующими строками в вашем Dockerfile :

РАЗОБЛАЧАТЬ80
РАЗОБЛАЧАТЬ8080
РАЗОБЛАЧАТЬ21
РАЗОБЛАЧАТЬ22
РАЗОБЛАЧАТЬ3306
РАЗОБЛАЧАТЬ27017
РАЗОБЛАЧАТЬ27018

Если вам нужно, вы можете смешивать порты TCP и UDP в своем Dockerfile . Например, если вы запустите DNS-сервер (который работает на UDP-порту 53), вместе с приведенным выше примером вы должны добавить следующие строки в свой Dockerfile .

РАЗОБЛАЧАТЬ80
РАЗОБЛАЧАТЬ8080
РАЗОБЛАЧАТЬ21
РАЗОБЛАЧАТЬ22
РАЗОБЛАЧАТЬ53/udp
РАЗОБЛАЧАТЬ3306
РАЗОБЛАЧАТЬ27017
РАЗОБЛАЧАТЬ27018

Вот как вы открываете порты, используя Dockerfile . Чтобы узнать больше о Dockerfile и выставление портов с помощью Dockerfile прочтите Dockerfile справочное руководство на https://docs.docker.com/engine/reference/builder/#expose

Спасибо, что прочитали эту статью.