Сохранение изменений контейнера с инструкциями CMD и EXPOSE
В этом завершающем шаге мы научимся сохранять изменения контейнера, устанавливая команду по умолчанию (CMD
) и открытые порты (EXPOSE
) для нового образа.
Инструкция CMD
определяет команду, которая будет выполняться при запуске контейнера из образа без указания конкретной команды. Инструкция EXPOSE
сообщает Docker, что контейнер прослушивает указанные сетевые порты во время работы.
Мы снова сохраним контейнер my-ubuntu
, на этот раз установив команду по умолчанию для вывода содержимого файла /hello.txt
и открыв порт 80.
Сначала убедимся, что контейнер my-ubuntu
остановлен.
docker stop my-ubuntu
Теперь сохраним контейнер с инструкциями CMD
и EXPOSE
. Обратите внимание, что инструкция CMD
передаётся в виде JSON-массива строк.
docker commit -c 'CMD ["cat", "/hello.txt"]' -c 'EXPOSE 80' my-ubuntu my-ubuntu-final
В выводе вы увидите ID вновь созданного образа.
Проверим настройки CMD
и EXPOSE
нового образа my-ubuntu-final
с помощью docker inspect
.
docker inspect --format '{{.Config.Cmd}}' my-ubuntu-final
Должен появиться вывод [cat /hello.txt]
, подтверждающий установку команды по умолчанию.
Теперь проверим открытые порты.
docker inspect --format '{{.Config.ExposedPorts}}' my-ubuntu-final
Вы должны увидеть что-то вроде map[80/tcp:{}]
, что означает открытие порта 80.
Наконец, запустим контейнер из этого нового образа без указания команды, чтобы проверить работу CMD
по умолчанию.
docker run --rm my-ubuntu-final
Флаг --rm
автоматически удаляет контейнер после завершения работы. Так как команда по умолчанию — cat /hello.txt
, контейнер должен запуститься, вывести "Hello from inside the container!" и завершить работу.
Вы должны увидеть текст "Hello from inside the container!" в терминале.
Это демонстрирует, как можно сохранять изменения контейнера и определять поведение по умолчанию с настройками сети для результирующего образа.