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

Средний уровень Docker

Mike Metzger

Data Engineer

Открытие сервисов

  • Команда EXPOSE
  • Определяет, какие порты контейнер будет использовать во время выполнения
  • Задаётся как <number>, <number>/tcp или <number>/udp
    • Например, EXPOSE 80 или EXPOSE 80/tcp
  • Допускается несколько записей
  • Используется как способ документирования
Средний уровень Docker

Использование флагов -p / -P

  • Всё равно требуются опции -p или -P для docker run, чтобы порты были доступны снаружи контейнера
  • Опция -P автоматически сопоставляет временный порт с открытым(-и) портом(-ами). Для просмотра сопоставления используйте docker ps -a.
  • Флаг -p<host port>:<container port> позволяет использовать конкретные порты.
Средний уровень Docker

Пример использования EXPOSE

# Dockerfile
FROM python:3.11-slim
ENTRYPOINT ["python","-mhttp.server"]
# Let the Docker engine know 
# port 8000 should be available
EXPOSE 8000
  • Создание контейнера из образа
    docker run pyserver
    
  • Вывод состояния контейнера
    docker ps -a
    
CONTAINER ID   IMAGE         ...   PORTS      NAMES
8c3d320255ae   pyserver      ...   8000/tcp   angry_chaum
Средний уровень Docker

Открытие доступа к портам

  • Автоматически сопоставить временный порт хоста с портом контейнера
    docker run -P pyserver
    
docker ps -a
CONTAINER ID   IMAGE      ...   PORTS                     NAMES
6bb458ef25da   pyserver   ...   0.0.0.0:55001->8000/tcp   beautiful_lamarr
Средний уровень Docker

Поиск открытых портов

  • docker inspect предоставляет подробную информацию
    docker inspect <id>
    
"NetworkSettings": {
  "Bridge": "",
  "Ports": {
    "8000/tcp": [{
                   "HostIp": "0.0.0.0",
                   "HostPort": "55001"
                    }]
            },
...
Средний уровень Docker

Давайте потренируемся!

Средний уровень Docker

Preparing Video For Download...