В этой статье я покажу вам, как открывать порты с помощью 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
Спасибо, что прочитали эту статью.