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

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

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

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

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

$ mkdir ~/myapp && cd ~/myapp

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

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

$ mkdir src

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

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

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

Написание файла Docker и открытие портов:

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

$ touch Dockerfile

Теперь введите следующие строки в 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 :

$ d ocker build -t 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 :

$ docker run -d -it —name www alpine-node: v1

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

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

$ docker inspect www | grep Address

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

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

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

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

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

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

EXPOSE 53/tcp

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

EXPOSE 53/udp

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

EXPOSE 53/tcp
EXPOSE 53/udp

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

EXPOSE 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 :

EXPOSE 80/tcp
EXPOSE 8080/tcp
EXPOSE 21/tcp
EXPOSE 22/tcp
EXPOSE 3306/tcp
EXPOSE 27017/tcp
EXPOSE 27018/tcp

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

EXPOSE 80
EXPOSE 8080
EXPOSE 21
EXPOSE 22
EXPOSE 3306
EXPOSE 27017
EXPOSE 27018

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

EXPOSE 80
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

Спасибо за чтение этой статьи.

Оцените статью
nanomode.ru
Добавить комментарий