Может быть сложно понять, как использовать Docker контейнеры в вашем Python и Бутылка рабочий процесс среды разработки. Это руководство быстро покажет вам, как получить Docker. запускается на macOS с работающей бутылкой веб приложение
Наши инструменты
Это руководство написано для Python 3. Оно может работать с Python 2, но он не тестировался с тем, что скоро будет устаревшим версии 2.7 . Вам действительно стоит использовать Python 3, предпочтительно последний выпуск, который в настоящее время 3.6.5 .
Docker для Mac необходим для запуска контейнеров Docker. Я рекомендую вам использовать стабильную версию, если только у вас есть явная цель для пограничный канал .
В контейнере Docker мы будем использовать:
- Python 3, в частности
- версия slim-3.6.5
- из Docker Hub
- Версия бутылки 0.12.13
Все для Dockerfile и проекта Bottle доступны с открытым исходным кодом под лицензией MIT на GitHub под каталог docker-bottle-mac из примеры-кода-блога репозиторий.
Установка Docker на macOS
Мы должны установить Docker, прежде чем сможем запускать наши контейнеры. Прыгать в следующий раздел, если у вас уже установлен и работает Docker для Mac на твоем компьютере.
На вашем Mac загрузите Docker Community Edition (CE) для Mac установщик.
Откройте Finder и перейдите в папку загрузок, где находится установочный файл. Следуйте инструкциям по установке и откройте Терминал после завершения установки.
Проверьте установку Docker, запустив команду docker
вместе с Флаг --version
:
docker --version
Если Docker установлен правильно, вы должны увидеть следующий вывод:
Docker version 18.03.1-ce, build 9ee9f40
Обратите внимание, что 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
.
Все работало, когда вы видите простой текстовый HTTP-ответ, например, показано выше на снимке экрана моего браузера Chrome.
Что дальше?
Мы только что установили Docker и написали веб-приложение Bottle для запуска внутри контейнер. Это только начало того, как вы можете интегрировать Docker в ваш рабочий процесс.
Затем взгляните на бутылку, Докер и страницы развертывания для дополнительных руководств.
Вопросов? Дайте мне знать через GitHub запрос на выпуск в репозитории Full Stack Python , в Твиттере @fullstackpython или @mattmakai .
Вы видите опечатку, проблему с синтаксисом или просто что-то непонятное в этом Сообщение блога? Вилка исходный код этой страницы на GitHub и отправьте запрос на перенос с исправлением или отправьте сообщение о проблеме на GitHub .