Покажем, как использовать docker-compose для Python и Jupyter


Оглавление (нажмите, чтобы открыть):

Доступ к ноутбуку Jupyter, работающему на контейнере Docker

Я создал изображение докеров с библиотеками python и Jupyter. Я запускаю контейнер с опцией -p 8888:8888 , чтобы связывать порты между хостом и контейнером. Когда я запускаю ядро ​​Jupyter внутри контейнера, он работает на localhost:8888 (и не находит браузер). Я использовал команду jupyter notebook

Но с моего хоста, какой IP-адрес я должен использовать для работы с Jupyter в браузере хоста?

С помощью команды ifconfig я нахожу eth0 , docker , wlan0 , lo .

Вам нужно запустить свой ноутбук на 0.0.0.0 : jupyter notebook -i 0.0.0.0 . Запуск на localhost делает его доступным только изнутри контейнера.

Хост-машина: docker run -it -p 8888:8888 image:version

Внутри контейнера: jupyter notebook —ip 0.0.0.0 —no-browser —allow-root

Хост-машина имеет доступ к этому URL: localhost:8888/tree‌​

При первом входе в систему на терминале будет отображаться ссылка для входа с помощью токена.

Чтобы получить ссылку на ваш сервер ноутбуков Jupyter:

После вашей команды docker run автоматически создается гиперссылка. Это выглядит примерно так: http://localhost:8888/?token=f3a8354eb82c92f5a12399fe1835bf8f31275f917928c8d2 :: /home/jovyan/work

Если вы хотите снова получить ссылку позже по строке, вы можете ввести docker exec -it jupyter notebook list .

Вы можете использовать команду jupyter notebook —allow-root —ip[of your container] или предоставить доступ ко всем ip с помощью опции —ip0.0.0.0 .

Познакомьтесь с проектом Torus, который недавно открыл Manifold. Мы хотели, чтобы наши инженеры ML могли легко приступить к работе над новыми проектами с согласованной средой разработки для всей команды. Этот Python cookiecutter создаст для вас новую структуру проекта, которая включает в себя Dockerfile, использующий предварительно запеченный образ ML dev, который мы поместили в Docker Hub, и конфигурацию Docker Compose, которая позаботится обо всей переадресации портов за вас. Конфигурация написана для выбора открытого порта на вашем хост-компьютере для пересылки на сервер ноутбука, работающий на 8888 внутри контейнера. Больше не нужно запускать несколько серверов ноутбуков на своем компьютере! Проверьте это, надеюсь, это полезно!

Команда docker run обязательна, чтобы открыть порт для контейнера, чтобы разрешить подключение через браузер хоста, назначив порт для контейнера docker с помощью -p, выберите изображение jupyter из ваших docker images .

Внутри контейнера запустите блокнот, назначив открытый порт:

Разработка простого учебного web приложения на Django с использование Docker (docker-compose)

Мне хотелось бы попрактиковаться в Django и Docker, создав небольшое приложение, которое разрасталось по мере осваивания технологий — так сказать учебный полигон для набивания шишек. Я планирую пока что собрать простую систему из двух docker контейнеров (docker-compose) для Postgres и Django. Позже перенести frontend например на Angular (с отдельным контейнером).

Какие пробемы у меня могут возникнуть (я уже запускал тестовые связки Django-Postgres в Docker) в процессе разрастания проекта? Пропадут ли данные из базы (пускай и заполненные «рыбой») при добавлении нового сервиса в docker-compose и т. д. Есть ли не очевидные подводные камни?

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

Разворачиваем python проект с docker на примере django + nginx + gunicorn + postgresql

Целью этой статьи я не ставил объяснять, что такое docker. Так же, как и про его установку и настройку я не буду рассказывать. Если вы этого не знаете, то вам следует сначала хотя бы поверхностно ознакоится с нею и только потом вернуться к данной статье. Жаль, что я не смог раньше прийти к данному материалу, но, надеюсь, что после его прочтения вы сможете так же легко, как и я, разворачивать проекты для разработки с помощью docker.

На самом деле, даже понимая, как работает docker, мне было достаточно сложно освоить то, как на нем без боли и страданий поднять проект и спокойно разрабатывать. В силу не только обстоятельств, но и некоторых своих предпочтений на моей рабочей лошадке стои windows, что делает немного неудобным процесс разработки web приложений на python, и приходится прибегать к магии: сначала был virtualbox, потом (дай Бог ему долгой жизни) vagrant. Но когда захотелось проникнуться темой использования docker, я как то втянулся и пока счастливо живу с ним. Надеюсь и вам понравится, хотя в начале пути всех ждут трудности и разочарование.

Дальше будет меньше слов и больше интересного кода.

Docker-Compose

Да, именно он помог мне избавиться от боли в мозгу, когда я не мог склеить два контейнера. Именно он поможет нам быстро развернуть проект и запустить. Честно признаюсь, хоть я и не сторонник запуска с docker на production, но один сайт я все таки запустил. И он не просто работает, еще и заказчик доволен ).

Что нам дает docker-compose? С его помощью мы соберем контейнеры, прицепим дисковое пространство, установим необходимые пакеты и запустим все это. Про него можете почитать здесь, а потом продолжим историю.

Для начала же давайте определимся с файловой структурой. Здесь я приведу пример того, как мне удобно работать. Я уверен, что ты сообразительный малый и, если нужно, сам сообразишь что на что поменять и как все это улучшить. Основную директорию, где мы будем создавать все файлы и откуда будем все запускать, я кратко назову DEV_PATH. Это может быть C:/work/site1/ или /home/user/site2 или где то еще. Жирным выделяю названия директорий. Курсивом — файлов.

  • DEV_PATH
    • docker
      • ​nginx
        • sitename.conf
      • python
        • Dockerfile
    • Dockerfile

      Его мы создали для контейнера python. Именно здесь больше работы приходится производить, так как нам нужно установить приложения, пакеты и примонтировать директории. Ниже содержимое файла.

      1. Указываем имя контейнера, на основе кторого будем это все собирать. Я использую официальный контейнер под python 3.6. Ты можешь выбрать свою версию.
      2. Указываем что и куда мотировать. Я использую директорию /srv/www/имя_проекта для лаконичности. Важно понимать, что лучше указывать путь до проекта так, как он будет выглядеть на твоем сервере. Приближаем окружение к боевой системе.
      3. Указываем эту же директорию как точку входя при выполнении следующих команд.
      4. Запускаем установку пакетов из requirements.txt. После этого твой образ сохранится уже с этими пакетами и тебе не придется каждый раз пересобирать их. главное заранее подготовить файл со всеми нужными пакетами. Каждый раз, меняя requirements.txt, придется перезапускать сборку образа и, соответственно, с нуля устанавливать эти пакеты.

      sitename.conf

      Обычный файл конфигурации nginx. Он нужен для того, чтобы сразу после запуска nginx «скушал» наш проект.

      На этом настройка nginx заканчивается, но сам образ еще будем ковырять.

      gunicorn.py

      Если нет желания запускать с ним, то, пожалуй, можете через manage.py runserver или иначе. Но мне gunicorn кажется весьма удачным решением. Вот конфигурационный файл.

      не забываем в requirements.txt добавить gevent и gunicorn


      docker-compose.yml

      Наконец то дошли к самому сладкому. Приведу пример файла, а в нем все пояснения, чтобы мы не потеряли что для чего делалось.

      Поехали

      Ниже привожу только команды. Выполнять их нужно из директории, где лежит yml файл.

      Сборка

      Запуск

      docker-compose up -d

      Остановка

      Не прощаясь

      Надеюсь, что тебе поможет, если не понять как собирать сложные окружения, то, хотя бы как я, окружение для разработки стандартных проектов. Скоро расскажу как поднимать окружение для npm + gulp + bower с кучей сладких надстроек. Так что — возвращайся.

      Как использовать Django, PostgreSQL и Docker

      В этом уроке мы создадим новый проект Django, используя Docker и PostgreSQL. Django поставляется со встроенной поддержкой SQLite, но даже для локальной разработки лучше использовать «настоящую» базу данных, такую как PostgreSQL, которая соответствует производственной.

      Можно запускать PostgreSQL локально, используя такой инструмент, как Postgres.app, однако сегодня среди многих разработчиков предпочтительным является использование Docker, инструмента для создания изолированных операционных систем. Проще всего представлять это как виртуальную среду, которая содержит все необходимое для нашего проекта Django: зависимости, базы данных, службы кэширования и любые другие необходимые инструменты.

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

      Инсталяция Docker

      Первым шагом является установка настольного приложения Docker для вашего локального компьютера:

      Первоначальная загрузка Docker может занять некоторое время для загрузки.

      После завершения установки Docker мы можем подтвердить, что запущена правильная версия. В вашем терминале запустите команду docker –version.

      Docker Compose – это дополнительный инструмент, который автоматически включается в загрузку Docker для Mac и Windows. Однако, если вы используете Linux, вам нужно будет добавить его вручную. Вы можете сделать это, выполнив команду sudo pip install docker-compose после завершения установки Docker.

      Проект Django

      Мы будем использовать приложение Message Board app из курса Django for Beginners. Он предоставляет код для приложения доски объявлений, использующего SQLite, который позже мы отредактируем.

      Создайте новый каталог в рабочей папке и клонируйте репозиторий в него.

      Затем установите пакеты, указанные в Pipenv, и запустите новую оболочку. Если вы видите (ch4-message-board-app), то вы знаете, что виртуальная среда активна.

      Внимание: Ожидается что у вас по умолчанию установлен Python 3.6. Так как в pipenv используется django 2.2.0. Если это не так используйте ключ выбора версии python

      Обязательно мигрируйте вашу базу данных после этих изменений.

      Если вы теперь используете команду python manage.py runserver, вы можете увидеть рабочую версию нашего приложения по адресу http://localhost: 8000.

      Docker

      Надеюсь, Docker завершил установку к этому моменту. Чтобы убедиться, что установка прошла успешно, закройте локальный сервер с помощью Control + c, а затем введите в командной строке docker run hello-world. Вы должны увидеть ответ вроде этого:

      Образы и контейнеры

      В Docker есть две важные концепции: образы (images) и контейнеры (containers).

      • Image: список инструкций для всех программных пакетов в ваших проектах
      • Container: экземпляр образа во время выполнения

      Другими словами, образ (image) описывает, что произойдет, а контейнер (container) – это то, что фактически выполняется.

      Для настройки образов и контейнеров в Docker мы используем два файла: Dockerfile и docker-compose.yml.

      Dockerfile содержит список инструкций для образа, иначе говоря, что на самом деле происходит в среде контейнера.

      Создадим новый файл Dockerfile.

      Затем добавьте следующий код в него.

      В верхней строке мы используем официальный образ Docker для Python 3.7. Далее мы создаем две переменные окружения.

      PYTHONUNBUFFERED гарантирует, что наш вывод консоли выглядит знакомым и не буферизируется Docker, что нам не нужно. PYTHONDONTWRITEBYTECODE означает, что Python не будет пытаться создавать файлы .pyc, которые мы также не желаем.

      Следующая строка устанавливает WORKDIR в /code. Это означает, что рабочий каталог находится в /code, поэтому в будущем для запуска любых команд, таких как manage.py, мы можем просто использовать WORKDIR, а не вспоминать, где именно в Docker фактически находится наш код.

      Затем мы установим наши зависимости, убедимся чтобы у нас последняя версия pip, устанавливаем pipenv, копируем наши локальные Pipfile и Pipfile.lock в образ Docker, и а затем запускаем его для установки наших зависимостей. Команда RUN позволяет нам запускать команды в Docker так же, как и в командной строке.

      Мы не можем запустить Docker-контейнер, пока у нас не будет созданного образа, поэтому давайте сделаем это, создав его.

      В случае успеха у вас должно быть что то типа такого.

      Далее нам нужен новый файл docker-compose.yml. Он говорит Docker, как запустить наши Docker-контейнеры. У нас будут 2 контейнера. Один для базы, другой для приложения.

      Добавьте в него следующее:


      В верхней строке мы указываем что мы используем самую последнюю версию Compose – 3.7.

      В db мы указываем что используем образ Docker для Postgres 10.1 и используем volumes, чтобы указать, где должен находиться контейнер в нашем контейнере Docker.

      В web мы указываем, как будет работать веб-сервис. Сначала необходимо создать образ из текущего каталога и запустить сервер в 0.0.0.0:8000. Мы используем volumes, чтобы указать где будем хранить код в нашем контейнере Docker по адресу /code/. Элемент ports позволяет нам сопоставить наш собственный порт 8000 с портом 8000 в контейнере Docker. Это порт Django по умолчанию. И, наконец, depends_on говорит, что мы должны сначала запустить db, прежде чем запускать наши веб-службы.

      Последний раздел volumes объясняется тем, что в Compose существует правило, согласно которому вы должны перечислить именованные тома в ключе volumes верхнего уровня.

      Обновление до PostgreSQL

      Нам нужно настроить наше приложение Message Board, чтобы использовать PostgreSQL вместо SQLite. Сначала установите psycopg2 для привязки нашей базы данных к PostgreSQL.

      Затем обновите файл settings.py, чтобы указать, что мы будем использовать PostgreSQL, а не SQLite.

      На этом этапе мы должны мигрировать нашу базу данных в Docker.

      Кроме того, поскольку приложение Message Board требует использования администратора, создайте суперпользователя в Docker. Выполните следующую команду ниже.

      Запуск Docker

      Наконец-то мы готовы запустить Docker! Первое выполнение команды может занять некоторое время, так как Docker должен загрузить весь необходимый контент. Но он закеширует этот процесс, поэтому будущие запуски будут намного быстрее.

      Введите следующую команду:

      Мы можем проверить, что все работает, поэтому перейдите по адресу http://127.0.0.1:8000/, где вы должны увидеть ту же домашнюю страницу, что и раньше.

      Теперь перейдите на http://127.0.0.1:8000/admin и залогинтесь. Вы можете добавить новые сообщения и затем отобразить их на главной странице, как описано в Django for Beginners.

      Небольшой список команд Docker

      Когда вы закончите, не забудьте закрыть контейнер Docker.

      Просто остановить контейнер

      Запустить ранее остановленный контейнер

      Что бы посмотреть работающие контейнеры

      Что бы посмотреть вообще все контейнеры

      Посмотреть список всех образов

      Иногда может понадобиться зайти в работающий контейнер. Для этого нужно запустить команду запуска интерактивной оболочкой bash

      Быстрый обзор

      Вот краткая версия терминов и понятий, которые мы рассмотрели в этом посте:

      • Image: «определение» вашего проекта
      • Container: это то что ваш проект на самом деле работает (экземпляр образа)
      • Dockerfile: определяет, как выглядит ваш образ
      • docker-compose.yml: YAML-файл, который задает как должны работать Docker образы

      Мы используем Dockerfile, чтобы сообщить Docker, как создать наш образ. Затем мы запускаем наш реальный проект в контейнере. Файл docker-compose.yml предоставляет дополнительную информацию о том, как наш контейнер Docker должен вести себя.

      Следующие шаги

      Если вы хотите больше узнать об использовании Django и Docker вместе, я написал целую книгу на эту тему, Django for Professionals.

      И если вы хотите углубиться в Docker, то фантастический ресурс, который я использовал сам, а теперь рекомендую другим, – это видеокурс Dive into Docker.

      Покажем, как использовать docker-compose для Python и Jupyter

      Docker compose for data analysis

      • ClickHouse is an open source column-oriented database management system capable of real time generation of analytical data reports using SQL queries.
      • Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text.
      • TABIX SQL Editor & Open source simple business intelligence for Clickhouse.
      • ClickHouse use 8123 port for http clients and 9000 for console client
      • Jupyter use 8888
      • TABIX use 8080

      To use password auth set command at docker-compose.yml with pwd hash generated by IPython.lib.passwd()

      Set volume /home/jovyan/work to you data dir, or use default

      Clickhouse Build from Dockerfile on Ubuntu base image.


      Change clickhouse/config.xml and clickhouse/users.xml in accordance with the documentation https://clickhouse.yandex/

      Set user password in clickhouse/users.xml

      Set volume to datastore in docker-compose.yml

      Tabix Uses as image

      To use basic HTTP auth set environment variable in docker-compose.yml

      In work directory of Jupyter Notebook added clickhouse python connection helper. Set USER/PASSWORD or use default readonly user. Import to you *.ipynb file clickhouse_helper and send query. You can get raw responce or pandas dataframe.

      Три приема работы с Docker из программы на Python (перевод)

      На написание этой истории меня вдохновили собственные тщетные попытки написать на питоне докероподобный демон для управления контейнерами.

      Прием № 1: Docker для Python

      С Docker можно работать и в командной строке, но из программы на Python через API это делать гораздо удобнее. Там можно получить список контейнеров, пробежаться по их атрибутам и делать достаточно мощные и интересные вещи, в том числе и с использованием приемов работы, о которых я говорю ниже.

      Прием № 2: пространства имен для Python

      За эту вещь надо благодарить парней из Zalando. Nsenter — обвязка для C API, позволяющая работать на уровне пространства имен ядра (kernel namespace). В Docker каждый контейнер выполняется в его собственном пространстве имен. Таким образом он отделяется и защищается от влияния других контейнеров на хосте, изолируется от них. Более подробную информацию можно получить, прочитав их замечательную статью.

      Nsenter очень прост в использовании. Допустим, вы запускаете новый nginx-контейнер командной docker run -d nginx и получаете его >

      С помощью приведенного ниже кода можно получить ID процесса интересующего контейнера. При наличии этого идентификатора появляется возможность выполнить команду в пространстве имен контейнера, прогуляться по файловой системе или даже что-нибудь поломать.

      Зачем все это? Чтобы отладить пару багов в выполняющемся внутри контейнера коде, вам наверняка периодически приходится переключаться между сессиями bash (мне? никогда!). Эту командную оболочку совсем не зря назвали Bash (англ. bash — сильный удар). Зачем лупить молотком, если можно взять звуковую отвертку (sonic screwdriver)?

      Прием № 3: cgroups для Python

      Docker использует контрольные группы, чтобы ограничить процессы, не давая им захватить все доступные на хосте ресурсы. Пакет cgroups позволяет создавать, выводить список, а также манипулировать существующими на хосте группами cgroups . Например, ограничения на использование CPU контейнеру по умолчанию не установлены, поэтому с помощью Python можно динамически управлять ресурсами хоста. В следующем примере новый процесс после запуска перемещается в cgroup. То же самое можно проделать и с существующим процессом, запущенным Докером.

      Как настроить Jupyter Notebook для Python 3

      Jupyter Notebook — это командная оболочка для интерактивных вычислений. Этот инструмент может использоваться не только с Python, но и другими языками программирования: Julia, R, Haskell и Ruby. Он часто используется для работы с данными, статистическим моделированием и машинным обучением.

      В статье мы рассмотрим, как настроить Jupyter Notebook для локального запуска или запуска на сервере под управлением Ubuntu 16.04. Этот инструмент поможет создавать файлы (notebooks), которые содержат не только компьютерный код, но и другие элементы (заметки, уравнения, диаграммы, ссылки и т.д.), которыми можно потом поделиться с заказчиками или друзьями.

      После прочтения этой статьи вы будете знать, как запускать код Python 3 при помощи Jupyter Notebook локально или на удалённом сервере.

      Требования

      Нам понадобится среда программирования для Python 3, установленная либо на локальной машине, либо на сервере Ubuntu 16.04.

      Шаг 1. Установка Jupyter Notebook

      Jupyter Notebook можно установить при помощи пакетного менеджера pip .

      В статье будет использоваться виртуальное окружение с именем my_env . Для установки пакета для работы с виртуальным окружением введите следующую команду в терминале:

      Теперь мы готовы создать виртуальное окружение. Выбираем каталог, в который все будет установлено, или создаем новый каталог с mkdir :

      Как только вы переместитесь в нужную вам директорию, введите следующую команду в терминал:

      По сути, pyvenv создает новый каталог, содержащий несколько элементов, которые мы можем просмотреть с помощью команды ls :

      Для активации виртуального окружения вам осталось ввести последнюю команду:

      Затем нужно убедиться, что pip был обновлен до последней версии:

      Теперь можно установить Jupyter Notebook следующей командой:

      После этой строчки кода Jupyter Notebook будет установлен в активное виртуальное окружение.

      XYZ school, Москва, до 250 000 ₽

      Следующий шаг предназначен для тех, кто хочет подключиться к веб-интерфейсу, используя SSH-туннелирование.

      Шаг 2 (необязательный). Запуск Jupiter Notebook на сервере

      Для тех, кто установил Jupyter Notebook на удаленный сервер, нужно подключаться к веб-интерфейсу через SSH-туннель. Приложение использует порт 8888 (или же 8889 ), а SSH-туннель поможет обезопасить соединение с сервером.

      SSH-туннелирование с помощью Mac или Linux

      Для тех, кто работает с macOS или Linux, нужно выполнить следующую команду в окне терминала:

      Команда ssh создаст SSH-подключение, а флаг –L перенаправит порт локального или клиентского хоста на хост и порт уделенного сервера. То есть все, что работает на порте 8888 с серверной стороны, будет работать на порте 8888 вашей локальной машины.

      При необходимости можно изменить порт 8888 на один из ваших вариантов, чтобы избежать использования порта, который уже используется другим процессом:

      • server_username — имя пользователя на сервере (например, sammy );
      • your_server_ip — это IP-адрес сервера.

      Например, для имени пользователя sammy и адреса сервера 203.0.113.0 команда будет следующей:


      Если после запуска команды ssh -L не появляется ошибка, можно переходить в среду программирования и запустить Jupyter Notebook:

      После этого, вы получите результат содержащий URL-адрес. Введите его в окне браузера и перейдите к веб-интерфейсу Jupyter Notebook ( http://localhost:8888 ).

      SSH-туннелирование с помощью Windows и Putty

      Пользователи Windows могут создать туннель SSH, используя программу Putty.

      Сначала нужно ввести URL-адрес сервера или IP-адрес имени хоста, как показано ниже на скриншоте:

      Далее нажимаем SSH внизу левой панели, для раскрытия полного меню и нажимаем на слово Tunnels (туннели). Вводим номер локального порта, который будет использоваться для доступа к Jupyter на локальном компьютере. Выбираем порт 8000 или выше, чтобы избежать совпадения портов, используемых другими службами, и указываем назначение как localhost: 8888 , где: 8888 — это номер порта, через который работает Jupyter Notebook.

      Теперь нажмите кнопку Add (добавить), и порты должны появиться в списке Forwarded ports (Переадресованные порты):

      И после этого переходим по адресу http://localhost:8000 (или любым другим портом, который вы выбрали) в веб-браузере, чтобы подключиться к Jupyter Notebook, работающему на сервере.

      Шаг 3. Запуск Jupyter Notebook локально

      После окончания установки Jupyter Notebook можно запустить при помощи следующей команды в терминале:

      В терминале выведутся логи Jupyter Notebook. При запуске инструмент использует определенный порт. Обычно это 8888 . Для проверки порта, с которым работает Jupyter Notebook, используйте команду, при помощи которой запускался Jupyter Notebook:

      Если вы используете Jupyter Notebook на локальном компьютере, а не на сервере, то при открытии веб-приложения Jupyter Notebook должен открыться ваш браузер по умолчанию. Если этого не произошло, можно открыть браузер вручную и перейти к http://localhost: 8888 для подключения.

      Если нужно остановить процессы Jupyter Notebook, то нажмите CTRL + C , а потом Y при появлении запроса на закрытие и ENTER для подтверждения.

      Вы получите следующий результат:

      Jupyter Notebook остановлен.

      Шаг 4. Использование Jupyter Notebook

      Пришло время начать использование Jupyter Notebook.

      Теперь можно подключиться к нему с помощью веб-браузера. Jupyter Notebook — очень мощный инструмент и имеет множество функций. В этом разделе описываются некоторые основные функции, позволяющие начать работу с ним. Jupyter Notebook покажет все файлы и папки в каталоге, из которого он запущен, поэтому, когда начинается работа над проектом, обязательно нужно запускать его из каталога проекта.

      Чтобы создать документ выбираем New → Python 3 в верхнем выпадающем меню:

      После открытия документа можно запускать код Python в ячейке или использовать язык разметки Markdown. Чтобы изменить первую ячейку для работы с Markdown, нужно нажать в верхней панели навигации Cell → Cell Type → Markdown. Теперь можно создавать заметки с использованием Markdown и даже включать уравнения, написанные в LaTeX, помещая их между символами $$ . Например, попробуем ввести следующую команду в ячейку после включения Markdown:

      Чтобы переформатировать Markdown в форматированный текст, нажимаем CTRL + ENTER и получаем следующие результаты:

      Также можно использовать ячейки Markdown для написания кода. Для теста напишем небольшое уравнение и выведем результат. Нажимаем на верхнюю ячейку, нажимаем ALT+ENTER для создания ячейки под ней и вводим следующий код в новую ячейку:

      Чтобы запустить код, нажимаем CTRL + ENTER и получаем следующие результаты:

      Теперь у вас есть возможность импортировать модули и использовать Jupyter Notebook так же, как и в любой другой среде разработки Python!

      Вывод

      Поздравляем! Теперь вы можете написать воспроизводимый код Python и заметки в Markdown с помощью Jupyter Notebook. Для получения справки по использованию Jupyter Notebook нажмите Help → User Interface Tour в главном меню навигации.

      Dockerize your Python Application

      Dockerfiles enable you to create your own images. A Dockerfile describes the software that makes up an image. Dockerfiles contain a set of instructions that specify what environment to use and which commands to run.

      Creating a Dockerfile

      First, start with a fresh empty directory. In our example, we call this my_new_docker_build – but feel free to use whatever name you like. This directory defines the context of your build, meaning it contains all of the things you need to build your image.

      Create a new text file in my_new_docker_build called Dockerfile (note no extension; on Windows, you may need to save the file as “All types” and put the filename in quotes to avoid automatically appending an extension); use whatever text file editor you already know (you might use Sublime, Notepad++, emacs, nano, or even vi). In our example, we use the basic Python 3 image as our launching point. Add the following line to your Dockerfile:

      We want to run a basic Python script which we’ll call my_script.py . First, we need to add the script to the Dockerfile:

      Our script depends on the Python pyStrich library (pyStrich generates 1D and 2D barcodes), so we need to make sure we install that before we run my_script.py ! Add this line to your Dockerfile to install random:

      Add this line to your Dockerfile to execute the script:

      Your Dockerfile should look like this:

      • FROM tells Docker which image you base your image on (in the example, Python 3).
      • RUN tells Docker which additional commands to execute.
      • CMD tells Docker to execute the command when the image loads.

      The Python script my_script.py looks like the following:

      Now you are ready to build an image from this Dockerfile. Run:

      Run Your Image

      After your image has been built successfully, you can run it as a container. In your terminal, run the command docker images to view your images. You should see an entry for “python-barcode”. Run the new image by entering:

      You should see what looks like a large ASCII QR code.


      Alternatives

      If you only need to run a simple script (with a single file), you can avo >my_script.py in /usr/src/widget_app/ , and you want to name the container my-first-python-script :

      Python 3:

      Python 2:

      Further information

      Creating a Dockerfile

      Make sure you do not append an extension to the Dockerfile (i.e., Docker does not recognize Dockerfile.txt ).

      You do not have to read the contents of every Dockerfile you base yours on, but make sure to at least familiarize yourself with them; you can avo >pip when the Python image already loads it), and you can make sure you write your RUN commands appropriately. Docker Hub does not enforce basing all images off only one distribution of Linux; if you use a Debian-based distribution (Debian, Ubuntu, Mint, etc.) you need to call apt-get to install software, and if you use a Red Hat-based distribution (Red Hat Enterprise Linux/RHEL, CentOS) you need to use yum . Gaining familiarity early prevents redoing your work and saves time.

      You might end up starting with an unfamiliar base image (i.e., if you primarily use CentOS and want to run a Python installation, the Python image extends Debian Jessie, so you need to use caution in how you write your RUN directives). If you maintain familiarity with Ubuntu, using Debian does not offer too many challenges (Ubuntu came from an offshoot of Debian Linux).

      Avoid putting any unused files in your build directory. Docker makes tarballs of everything in the current directory and sends that to the Docker daemon, so if you have unnecessary files, those are included.

      Alternatives

      Do not attempt to run a script requiring dependencies using the Alternative method, unless those dependencies come with the bare Python installation.

      Deleting Docker Containers

      Run the following command from your docker console to see a list of your containers:

      Note: Removing a Container is FINAL.

      Delete a Single Container

      1. Run docker ps -a and retrieve the container >a39c259df462 ).
      2. Run docker rm a39c259df462 to remove just that container.

      Delete All Your Containers

      To delete all your containers, run:

      • -q prints only the container >-a prints all containers
      • passing all container >docker rm deletes all containers

      Deleting Docker Images

      Delete a Single Image

      1. Retrieve the Image >docker images (The Image >docker rmi

      Delete All Untagged Images

      This requires a little bit of Linux magic (like deleting all containers above). Docker marks images without tags with » » so we need to process only those images. Run the following command from your terminal (the awk programming language gives you text manipulation tools):

      Delete All Images

      To delete all of your images, you can simplify the command above:

      Delete Docker Containers

      Usage:

      Command Deletes
      all All containers
      $

      The container corresponding to the container ID you pass

      Delete Docker Images

      Usage:

      Command Deletes
      all All images
      untagged Images tagged with “ » (untagged images)
      $

      The image corresponding to the Image ID you pass

      Next: Dockerize your Django Application
      Get started with dockerizing your Django application.

      By Runnable: The service that speeds up development by prov >Visit Runnable

      ИТ База знаний

      ShareIT — поделись знаниями!


      Полезно

      Узнать IP — адрес компьютера в интернете

      Онлайн генератор устойчивых паролей

      Онлайн калькулятор подсетей

      Калькулятор инсталляции IP — АТС Asterisk

      Руководство администратора FreePBX на русском языке

      Руководство администратора Cisco UCM/CME на русском языке

      Навигация

      Серверные решения

      Телефония

      FreePBX и Asterisk

      Настройка программных телефонов

      Корпоративные сети

      Похожие статьи

      15 примеров CURL в Linux

      rConfig — резервное копирование конфигов сетевого оборудования

      Ноу-хау: разбираемся в преимуществах виртуализации

      Установка VirtualBox 6.0 на Linux

      Настройка и использование Docker Compose

      Единая точка запуска

      Что это вообще такое?

      Docker Compose является инструментом для определения и запуска контейнерных приложений. С Compose вы получаете возможность настраивать службы используя файл YAML. С помощью одной команды Compose вы создаете и запускаете все службы в соответствии с вашей конфигурацией.

      Установка начинается с создания каталога проекта:

      Создайте файл под названием app.py и вставьте в него следующие данные:

      В нашем случае название хоста — redis, который использует порт 6379. Создайте файл под названием needs.txt в каталоге вашего проекта и вставьте его в:

      Теперь следует написать код для файла Dockerfile, содержащий все необходимые переменные для среды разработки.

      В каталоге вашего проекта создайте файл с именем Dockerfile (файл будет определять среду приложения) и вставьте следующее содержимое:

      Определение сервисов осуществляется при создании файла с именем docker-compose.yml в каталоге вашего проекта со следующей информацией:

      На основании содержания файла происходит запуск двух сервисов: Web и Redis, а в дальнейшем вы можете вносить в этот файл различные БД и иную важную информацию.

      C помощью команды Compose создайте ваше приложение, после чего из каталога проекта запустите приложение, запустив docker-compose. Вот так:

      Compose извлекает образ Redis, создавая образ для вашего приложения и запускает выбранные службы. В этом случае код копируется в образ во время сборки. Как вам такое?

      Теперь попробуйте ввести http://localhost:5000/ в браузере, чтобы чекнуть запущенное приложение.

      Если вы используете Docker для Linux, Docker Desktop для Mac или Docker Desktop для Windows, то теперь веб-приложение должно «смотреть» на порт 5000 на хосте Docker. Введите в своем веб-браузере адрес http://localhost:5000, чтобы увидеть сообщение Hello World. Если не сработает, вы также можете попробовать зайти на http://127.0.0.1:5000.

      Если вы используете Docker Machine на Mac или Windows, используйте ip MACHINE_VM docker-machine для получения IP-адреса вашего хоста Docker. Затем откройте http://MACHINE_VM_IP:5000 в браузере.

      Вы должны увидеть сообщение в своем браузере:

      Hello World! I have been seen 1 times.

      Переключитесь на другое окно терминала и введите docker image ls , чтобы вывести список локальных образов/контейнеров. Вывод на этом этапе должен показывать redis и web.

      Важно: Вы можете просматривать запущенные контейнеры с помощью Docker Inspect Tag или ID

      Запустите docker-compose из каталога вашего проекта во втором терминале, либо нажмите CTRL + C в исходном терминале, где приложение уже запущено и отредактируйте файл Compose.

      Отредактируйте docker-compose.yml в каталоге вашего проекта для внесения той или иной правки в веб-службе

      Новый ключ редактирует каталог проекта на хосте внутри контейнера, что позволяет изменять код без необходимости перестраивать весь образ. Ключ среды устанавливает переменную FLASK_ENV, которая сообщает о запуске в режиме разработки и перезагрузке кода при изменении. Важно: этот режим должен использоваться только при разработке.

      В каталоге проекта введите docker-compose up , чтобы создать приложение с обновленным файлом Compose, и запустите его.

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

      Измените сообщение в app.py и сохраните его:

      Обновите результат в вашем браузере (нажмите F5 или Ctrl + F5) . Приветствие должно быть обновлено, а счетчик должен увеличиваться.

      Вы можете поэкспериментировать с другими командами. Если вы хотите запускать свои службы в фоновом режиме, вы можете сделать следующее:

      Команда docker-compose run позволяет вам применять одноразовые команды к вашим сервисов. Например, чтобы увидеть, какие переменные среды доступны для веб-службы:

      Выполните команду docker-compose –help , чтобы увидеть весь список доступных команд.

      Если вы запустили Compose с помощью docker-compose up -d , то нужно будет остановить ваши службы после работы с ними, для этого поможет команда ниже: $ docker-compose stop

      Если хотите полностью уничтожить контейнер, используйте команду down .

      Полезна ли Вам эта статья?

      Пожалуйста, расскажите почему?

      Нам жаль, что статья не была полезна для вас 🙁 Пожалуйста, если не затруднит, укажите по какой причине? Мы будем очень благодарны за подробный ответ. Спасибо, что помогаете нам стать лучше!

      Подпишитесь на нашу еженедельную рассылку, и мы будем присылать самые интересные публикации 🙂 Просто оставьте свои данные в форме ниже.

      docker-compose: почему здесь вызывается мое приложение на python?

      Я почесал голову некоторое время с этим. У меня есть следующий Dockerfile для моего приложения на python:

      И вот как выглядит docker-entrypoint.sh:

      Вот что я пытаюсь сделать:

      (Этот материал уже работает)

      1) Мне нужен образ докера, который запускает мое приложение python при запуске это в контейнере. (это работает)

      2) Мне нужен файл docker-compose, который запускает 2 службы + мое приложение python, НО перед запуском моего приложения python мне нужно выполнить некоторую работу по инициализации, для этого я создал сценарий оболочки, который это docker-entrypoint.sh. Я хочу выполнить эту работу по инициализации ТОЛЬКО ОДИН РАЗ, когда я впервые разверну свое приложение на компьютере . Поэтому я создаю скрытый файл .initialized, который я использую для проверки в своем скрипте оболочки.

      Я прочитал, что использование точки входа в файле docker-compose перезаписывает любую старую точку входа / cmd, переданную в Dockerfile. Вот почему в остальной части моего сценария оболочки я вручную запускаю свой код, используя «sudo python3 main .py -debug», эта часть else работает нормально.

      (Это основной вопрос)

      В части if я не запускаю свое приложение в сценарии оболочки. Я тестировал сам скрипт оболочки отдельно, операторы if и else работают так, как я ожидал, но когда я запускаю «sudo docker-compose up», первый раз, когда мой скрипт оболочки достигает части if, он повторяет два оператора, создает скрытый файл и , ТО ЗАПУСКАЕТ МОЕ ПРИЛОЖЕНИЕ . Вывод на консоль для приложения отображается фиолетовым / розовым / mauve, тогда как другие две службы выводят свои журналы на желтый и голубой. Я не уверен, имеют ли значение цвета, но в нормальном состоянии журналы моего приложения всегда зеленые, фактически первые два эха «Инициализация» и «Создание .initialized» также зеленые! поэтому я подумал упомянуть эту деталь. После этих двух отголосков моё приложение загадочно начинается и регистрирует вывод консоли в фиолетовый .

      Почему / как мое приложение вызывается в операторе if скрипта оболочки?

      Мастер Йода рекомендует:  Сравнение быстродействия WordPress-проекта на PHP и на .NET
Добавить комментарий