Простое приложение с Docker: сборка и запуск приложения в контейнере
Сборка приложения
Мы готовы собрать приложение, которое мы создали в предыдущем посте. Убедитесь, что вы все еще на верхнем уровне вашего нового каталога. Вот что должен показать ls:
$ ls
Dockerfile app.py requirements.txt
Теперь запустите команду сборки (build command). Она создает образ Docker, который мы назовем с помощью параметра --tag. Используйте -t, если вы хотите использовать более короткий вариант.
docker build --tag=friendlyhello .
Где ваш встроенный образ? Он находится в локальном реестре образов Docker вашей машины:
$ docker image ls
REPOSITORY TAG IMAGE ID
friendlyhello latest 326387cea398
Обратите внимание, что тег по умолчанию latest (последний). Полный синтаксис для опции тега будет --tag=friendlyhello:v0.0.1.
Устранение неполадок для пользователей Linux
Настройки прокси-сервера
Прокси-серверы могут блокировать подключения к вашему веб-приложению после его установки и запуска. Если вы находитесь за прокси-сервером, добавьте следующие строки в ваш Dockerfile, используя команду ENV, чтобы указать хост и порт для ваших прокси-серверов:
# Задайте прокси-сервер, замените host:port значениями для ваших серверов
ENV http_proxy host:port
ENV https_proxy host:port
Настройка DNS
Неправильная конфигурация DNS может вызвать проблемы с pip. Вам нужно установить свой собственный адрес DNS-сервера, чтобы pip работал правильно. Возможно, вы захотите изменить настройки DNS демона Docker. Вы можете отредактировать (или создать) файл конфигурации в /etc/docker/daemon.json с помощью ключа dns следующим образом:
{
"dns": ["your_dns_address", "8.8.8.8"]
}
В приведенном выше примере первым элементом списка является адрес вашего DNS-сервера. Второй элемент - это DNS от Google, который можно использовать, когда первый недоступен.
Прежде чем продолжить, сохраните daemon.json и перезапустите сервис докера.
sudo service docker restart
После исправления повторите попытку сборки.
Запуск приложения
Запустите приложение, сопоставив порт 4000 вашей машины с опубликованным портом 80 контейнера, используя -p:
docker run -p 4000:80 friendlyhello
Вы должны увидеть сообщение о том, что Python обслуживает ваше приложение по адресу http://0.0.0.0:80. Но это сообщение поступает из контейнера, который не знает, что вы связали порт 80 этого контейнера с портом 4000 в вашей системе и выполняете запросы по URL http://localhost:4000.
Перейдите по этому URL в веб-браузере, чтобы увидеть отображаемый контент на веб-странице.
Примечание. Если вы используете Docker Toolbox в Windows 7, используйте IP-адрес Docker Machine вместо localhost. Например, http://192.168.99.100:4000/. Чтобы узнать IP-адрес, используйте команду docker-machine ip.
Вы также можете использовать команду curl в терминале для просмотра того же содержимого.
$ curl http://localhost:4000
<h3>Hello World!</h3><b>Hostname:</b> 8fc990912a14<br/><b>Visits:</b> <i>cannot connect to Redis, counter disabled</i>
Это переназначение портов 4000:80 демонстрирует разницу между EXPOSE в Dockerfile и тем, какое значение publish установлено при docker run -p.
Нажмите CTRL+C в вашем терминале, чтобы выйти.
В Windows явно остановите контейнер
В системах Windows CTRL+C не останавливает контейнер. Итак, сначала нажмите CTRL+C, чтобы получить подсказку (или откройте другой терминал), затем введите docker container ls, чтобы просмотреть список запущенных контейнеров, а затем выполните docker container stop <Container NAME or ID>, чтобы остановить контейнер. В противном случае вы получите сообщение об ошибке от демона при попытке перезапустить контейнер на следующем шаге.
Теперь давайте запустим приложение в фоне, в отдельном режиме:
docker run -d -p 4000:80 friendlyhello
Вы получаете длинный идентификатор контейнера для своего приложения, а затем отправляетесь обратно на свой терминал. Ваш контейнер работает в фоновом режиме. Вы также можете увидеть сокращенный идентификатор контейнера с помощью Docker-контейнера ls (и оба работают взаимозаменяемо при выполнении команд):
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED
1fa4ab2cf395 friendlyhello "python app.py" 28 seconds ago
Обратите внимание, что идентификатор CONTAINER совпадает с тем, что находится на http://localhost:4000.
Теперь используйте docker container stop, чтобы завершить процесс, используя идентификатор CONTAINER, например так:
docker container stop 1fa4ab2cf395
Читайте также:
- Концепции Docker
- Подготовка вашего Docker окружения
- Простое приложение с Docker: определение контейнера с помощью Dockerfile
Комментарии
Отправить комментарий