В этой статье я покажу вам, как чтобы открыть порты с помощью Dockerfile на реальном примере. Приступим.
Во-первых, мы должны создать каталог проекта. В этом каталоге вы должны хранить все файлы проекта и Dockerfile .
Выполните следующую команду, чтобы создать каталог проекта myapp/ в домашнем каталоге пользователей и перейдите к нему:
Подготовка веб-приложения:
Теперь создайте каталог src/ внутри каталога ~/myapp/ с помощью следующей команды:
В src/ , весь исходный код моего приложения NodeJS будет сохранен.
Я просто создам простой файл app.js в src/ и запустите простой веб-сервер на порту 8080 только для демонстрации.
src/app .js файл содержит следующие строки кодов:
Написание файла Docker и открытие портов:
Теперь создайте файл Docker в каталоге ~/myapp с помощью следующей команды:
Теперь введите следующие строки в Dockerfile и сохраните его. Я расскажу, что означают эти строки позже.
Здесь, FROM alpine: 3.8 означает использование образа Docker alpine: 3.8 в качестве основы для нового образа, который мы будем создавать из этого . Dockerfile .
RUN apk update означает выполнение команды apk update в базовом образе Docker alpine: 3.8 .
RUN apk add –no-cache nodejs означает запуск apk add для установки языка программирования NodeJS в базовый образ Docker alpine: 3.8 .
COPY ./src/app означает копирование всех файлов из каталога ~/myapp/src в /app нового образа Docker, который мы создадим с помощью Dockerfile .
CMD [« /usr/bin/node »,«/app/app.js »] означает запуск файла /app/app.js из нового контейнера, используя node двоичный файл, расположенный в /usr/bin/node .
Наконец, для EXPOSE 8080/tcp означает открыть или открыть TCP-порт 8080 для главного компьютера.
Создание собственного образа Docker с помощью Dockerfile:
Теперь давайте создайте собственный образ Docker alpine-node: v1 , используя только что созданный Dockerfile .
Сначала убедитесь, что вы ‘ re в каталоге ~/myapp/, а затем выполните следующую команду, чтобы создать собственный образ Docker alpine-node: v1 :
Как видите, создается пользовательский образ Docker alpine-node: v1 . Требуемый базовый образ Docker и пакеты извлекаются из Интернета.
Как видите, пользовательский образ Docker alpine-node: v1 успешно создан.
Тестирование настраиваемого образа Docker:
Теперь мы можем протестировать настраиваемый образ Docker alpine-node : v1 очень легко. Все, что нам нужно сделать, это создать контейнер из образа alpine-node: v1 .
Выполните следующую команду, чтобы создать контейнер Docker www из образа Docker alpine-node: v1 :
Контейнер Создается www .
Теперь давайте узнаем IP-адрес контейнера Docker www с помощью следующей команды:
Как видите, в моем случае IP-адрес 172.17.0.3 . Таким образом, приложение NodeJS, которое я написал, должно быть доступно из веб-браузера через порт 8080 этого IP-адреса.
Вуаля! Я могу получить доступ к порту 8080 моего www контейнера Docker.
В основном это то, как вы открываете определенные порты в своих пользовательских образах Docker, которые вы будете создавать с помощью Dockerfile ..
Открытие TCP- и UDP-портов с помощью Dockerfile:
В предыдущем разделе этой статьи я показал вам, как открыть TCP-порт с помощью Dockerfile .
Вы можете легко открыть TCP-порт (скажем, TCP-порт 53 ) в вашем Dockerfile . со следующей строкой:
Вы также можете открыть порт UDP (скажем, порт UDP 53 ) со следующей строкой в вашем Dockerfile :
Вы можете одновременно открыть порт TCP и UDP с помощью следующих строк в вашем Dockerfile :
EXPOSE 53/udp
Если вы не укажете, какой протокол (TCP или UDP) использовать, по умолчанию используется TCP. Например, если вы напишете следующую строку в своем Dockerfile :
Затем 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 :
EXPOSE 8080/tcp
EXPOSE 21/tcp
EXPOSE 22/tcp
EXPOSE 3306/tcp
EXPOSE 27017/tcp
EXPOSE 27018/tcp
Если хотите, вы можете оставить спецификацию протокола, так как Docker по умолчанию использует TCP и сделать то же самое со следующими строками в вашем Dockerfile :
EXPOSE 8080
EXPOSE 21
EXPOSE 22
EXPOSE 3306
EXPOSE 27017
EXPOSE 27018
При необходимости вы можете смешивать порты TCP и UDP в своем Dockerfile . Например, если вы запускаете DNS-сервер (который работает на UDP-порту 53), вместе с приведенным выше примером вы должны добавить следующие строки в свой Dockerfile .
EXPOSE 8080
EXPOSE 21
EXPOSE 22
EXPOSE 53/udp
EXPOSE 3306
EXPOSE 27017
EXPOSE 27018
Вот как вы открываете порты с помощью Dockerfile . Чтобы узнать больше о Dockerfile и раскрытии портов с помощью Dockerfile , прочтите справочное руководство Dockerfile по адресу https://docs. docker.com/engine/reference/builder/#expose
Спасибо за чтение этой статьи.