Рубрики
Без рубрики

Запуск приложений Bottle в контейнерах Docker на macOS

Узнайте, как настроить и разработать новое веб-приложение Bottle в контейнере Docker.

Автор оригинала: Matt Makai.

Может быть сложно понять, как использовать Docker контейнеры в вашем Python и Бутылка рабочий процесс среды разработки. Это руководство быстро покажет вам, как получить Docker. запускается на macOS с работающей бутылкой веб приложение

Наши инструменты

Это руководство написано для Python 3. Оно может работать с Python 2, но он не тестировался с тем, что скоро будет устаревшим версии 2.7 . Вам действительно стоит использовать Python 3, предпочтительно последний выпуск, который в настоящее время 3.6.5 .

Docker для Mac необходим для запуска контейнеров Docker. Я рекомендую вам использовать стабильную версию, если только у вас есть явная цель для пограничный канал .

В контейнере Docker мы будем использовать:

Все для Dockerfile и проекта Bottle доступны с открытым исходным кодом под лицензией MIT на GitHub под каталог docker-bottle-mac из примеры-кода-блога репозиторий.

Установка Docker на macOS

Мы должны установить Docker, прежде чем сможем запускать наши контейнеры. Прыгать в следующий раздел, если у вас уже установлен и работает Docker для Mac на твоем компьютере.

На вашем Mac загрузите Docker Community Edition (CE) для Mac установщик.

Загрузите Docker Community Edition для Mac.

Откройте Finder и перейдите в папку загрузок, где находится установочный файл. Следуйте инструкциям по установке и откройте Терминал после завершения установки.

Проверьте установку Docker, запустив команду docker вместе с Флаг --version :

docker --version

Если Docker установлен правильно, вы должны увидеть следующий вывод:

Docker version 18.03.1-ce, build 9ee9f40

Обратите внимание, что Docker запускается через системный агент, который вы можете найти в строке меню.

Агент Docker в строке меню.

Докер теперь установлен, поэтому мы можем запустить контейнер и написать простой Приложение Bottle для тестирования запуска приложения в контейнере.

Dockerfile

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

# this is an official Python runtime, used as the parent image
FROM python:3.6.5-slim

# set the working directory in the container to /app
WORKDIR /app

# add the current directory to the container as /app
ADD . /app

# execute everyone's favorite pip command, pip install -r
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# unblock port 80 for the Bottle app to run on
EXPOSE 80

# execute the Flask app
CMD ["python", "app.py"]

Сохраните Dockerfile и затем в командной строке запустите:

docker build -t bottledock .

В приведенном выше файле docker build используется флаг -t для пометки изображения название бутылка .

Если сборка прошла успешно, оболочка покажет некоторый завершенный вывод, подобный следующему:

$ docker build -t bottledock .
Sending build context to Docker daemon  16.38kB
Step 1/6 : FROM python:3.6.5-slim
3.6.5-slim: Pulling from library/python
f2aa67a397c4: Pull complete 
19cc085bc22b: Pull complete 
83bd7790bc68: Pull complete 
8b3329adba1b: Pull complete 
d0a8fd6eb5d0: Pull complete 
Digest: sha256:56100f5b5e299f4488f51ea81cc1a67b5ff13ee2f926280eaf8e527a881afa61
Status: Downloaded newer image for python:3.6.5-slim
 ---> 29ea9c0b39c6
Step 2/6 : WORKDIR /app
Removing intermediate container 627538eb0d39
 ---> 26360255c163
Step 3/6 : ADD . /app
 ---> 9658b91b29db
Step 4/6 : RUN pip install --trusted-host pypi.python.org -r requirements.txt
 ---> Running in f0d0969f3066
Collecting bottle==0.12.13 (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/bd/99/04dc59ced52a8261ee0f965a8968717a255ea84a36013e527944dbf3468c/bottle-0.12.13.tar.gz (70kB)
Building wheels for collected packages: bottle
  Running setup.py bdist_wheel for bottle: started
  Running setup.py bdist_wheel for bottle: finished with status 'done'
  Stored in directory: /root/.cache/pip/wheels/76/a0/b4/2a3ee1a32d0506931e558530258de1cc04b628eff1b2f008e0
Successfully built bottle
Installing collected packages: bottle
Successfully installed bottle-0.12.13
Removing intermediate container f0d0969f3066
 ---> 0534575c8067
Step 5/6 : EXPOSE 80
 ---> Running in 14e49938d3be
Removing intermediate container 14e49938d3be
 ---> 05e087d2471d
Step 6/6 : CMD ["python", "app.py"]
 ---> Running in ca9738bfd06a
Removing intermediate container ca9738bfd06a
 ---> 9afb4f01e0d3
Successfully built 9afb4f01e0d3
Successfully tagged bottledock:latest

Мы также можем увидеть изображение с помощью команды docker image ls . Дай это попробуйте сейчас:

docker image ls

Имя нашего тега должно появиться в списке изображений:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
bottledock          latest              9afb4f01e0d3        About a minute ago   145MB

Наше изображение готово к загрузке в качестве контейнера, поэтому мы можем закодировать короткий Веб-приложение Bottle для тестирования и дальнейшей разработки.

Кодирование веб-приложения для бутылок

Пришло время написать для тестирования простое приложение Bottle в стиле «Hello, World!». запуск кода Python в нашем контейнере Docker. В рамках текущего В каталоге проекта создайте файл с именем app.py со следующим содержимым:

import bottle
from bottle import route, run


app = bottle.default_app()


@route('/')
def hello_world():
    return "Hello, world! (From Full Stack Python)"


if __name__ == "__main__":
    run(host="0.0.0.0", port=8080, debug=True, reloader=True)

Приведенный выше код возвращает простое “Hello, world!” сообщение, когда выполняется сервером разработки Bottle и связывается с клиентом.

Нам нужен еще один файл, чтобы указать нашу зависимость bottle . Создайте файл requirements.txt в том же каталоге, что и app.py :

bottle==0.12.13

Убедитесь, что оба файла app.py и requirements.txt сохранены, затем мы можем попробовать код.

Запуск контейнера

Теперь, когда у нас есть изображение вместе с кодом Python в файле мы можем запустить изображение как контейнер с помощью команды docker run . Выполнить следующую команду, не забудьте заменить абсолютный путь для том в свой каталог.

docker run -p 5000:8080 --volume=/Users/matt/devel/py/blog-code-examples/docker-bottle-macapp bottledock

Если вы получили ошибку python: невозможно открыть файл app.py: [Errno 2] Нет такого файла или каталога , тогда вы, вероятно, не изменили /Users/matt/devel/py/botledocker на каталог, в котором находятся файлы вашего проекта, особенно app.py .

Бутылочное веб-приложение, отвечающее на запросы из контейнера Docker.

Все работало, когда вы видите простой текстовый HTTP-ответ, например, показано выше на снимке экрана моего браузера Chrome.

Что дальше?

Мы только что установили Docker и написали веб-приложение Bottle для запуска внутри контейнер. Это только начало того, как вы можете интегрировать Docker в ваш рабочий процесс.

Затем взгляните на бутылку, Докер и страницы развертывания для дополнительных руководств.

Вопросов? Дайте мне знать через GitHub запрос на выпуск в репозитории Full Stack Python , в Твиттере @fullstackpython или @mattmakai .

Вы видите опечатку, проблему с синтаксисом или просто что-то непонятное в этом Сообщение блога? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос с исправлением или отправьте сообщение о проблеме на GitHub .