Рубрики
Uncategorized

Начало работы с Docker и Smalltalk!

Что такое контейнеры Docker и Linux? Контейнеры Linux — это способ виртуализации, который … с меткой DevOps, Docker, Raspberrypi, SmallTalk.

Что такое контейнеры Docker и Linux?

Контейнеры Linux это способ виртуализации, который существует уже довольно долгое время. По сравнению с классической «виртуальной машиной», такой как VMware, VirtualBox и т. Д., Которые являются громоздкими и тяжелыми для запуска, контейнеры легкие, намного меньше, и они делятся ядром хоста. То есть x количество небольших изолированных систем Linux (контейнеры) может быть запущено и контролируется в ядре Linux хоста. Эти контейнеры могут запускать «приложения» (веб -сервер, DB, доменные приложения, почтовый сервер, монитор инструментов, что угодно). Это дает гораздо лучшую оптимизацию аппаратных ресурсов, управления и т. Д.

Docker Пошел немного дальше и дал нам инструмент для управления приложениями, которые работают на вершине контейнеров. Это облегчает задачи для создания, развертывания и поддержания контейнеров. Что смешно для нас (SmallTalkers), так это то, что Docker снова представил концепцию «изображения» (эй, Docker, не красть у нас, это слово — наше !!!!). И угадайте, что? Это та же идея. Это в основном исполняемый результат запуска некоторых инструкций для создания и запуска приложения. Затем, когда Docker запускает это изображение, оно становится «одним (или несколькими) контейнерами.

Здесь Хорошее краткое изложение того, что я только что пытался объяснить выше.

Жидкая ошибка: внутренняя

Почему Docker имеет отношение к SmallTalk?

Некоторые из функций Docker не так удивительны для нас. Тем не менее, их еще немало:

  • Облегчить развертывание.
  • Возможность воспроизвести одну и ту же «инфраструктуру» в несколько мест (тестирование, производство и т. Д.) независимо от хоста.
  • Лучшая оптимизация аппаратных ресурсов.
  • Облегчить горизонтальное масштабирование. Каждый физический узел может запускать n контейнеров, и у вас могут быть M узлы в «облаке» (см. Подробнее ниже).
  • Позволяет модной «инфраструктуре как кода» (хотя я предпочитаю называть ее «инфраструктурой как файлы конфигурации»).
  • Ваше развертывание/сборка воспроизводима, кодовая версия и т. Д.
  • Существует множество определений Docker для существующих программ (веб -серверов, баз данных, инструментов и т. Д.), Поэтому вместо того, чтобы устанавливать все, что вы просто начинаете с существующего изображения.
  • Большие игроки, стоящие за этим ( redhat openshift , Google Kubernetes и т. Д.)
  • Многие другие….

Очевидно, я думаю, что ответ («Почему он актуально?») Во многом будет зависеть от того, кого вы спрашиваете: разработчик, система или Devops.

Как сделать нанесение малого приложения?

Первое, что вам нужно, — это создать DockerFile для вашего приложения, что будет указано, что нужно вашему изображению/контейнеру Docker. Обычно вы начинаете не с нуля, а с существующих изображений. Dockerhub является крупнейшей библиотекой существующих изображений. Конечно, есть и другие.

Несколько недель назад некоторые клиенты из Экземпляры Где спрашивать об использовании Docker с Vasmalltalk Анкет Итак, с помощью нескольких людей (спасибо Джулиану Маэстри и Норберту Шлемеру!) От сообщества мы получили немного Готовые допросы на GitHub .

Пример на GitHub — это Приморский Веб -приложение, которое имитирует светофорный свет. Это очень простой пример, но достаточно, чтобы показать несколько функций. Обратите внимание, что .icx Размер изображения составляет всего 3,5 МБ И это позволяет сбрасывать сбрасывание стека, удаленную отладку и т. Д. (Темы для будущих постов).

Веб -приложение работает под портом 7777 И поэтому вы добираетесь до этого из веб -браузера аналогично этим: http://yourhostname.local: 7777/

И чтобы сделать его еще более забавным, наш хост (где работал Docker) не был обычным ПК с Linux, а Raspberry Pi 3B+ Raspbian Linux:) Однако тот же пример должен работать для любого обычного Linux и x86. В любом случае, точка входа для всех деталей — Здесь Анкет

Как видите, есть несколько Docker \ * файлы Это потому, что мы экспериментировали с различными ОС и ароматами. Тот, который мы сейчас используем, debian_slim_dockerfile что выглядит так:

FROM debian:9-slim

# Comment build and run commands
# docker build -f ./debian_slim_Dockerfile -t seaside-debian-slim .
# docker run -e TZ=America/New_York --mount type=bind,source="$(pwd)",target=/opt/log -p 7777:7777 seaside-debian-slim

LABEL version="0.2.0"
LABEL maintainer="mpeck@instantiations.com"
LABEL description="VAST SeasideTrafficLight example"

# Install VASmalltalk Dependencies
RUN apt-get update \
&& apt-get install --assume-yes --no-install-recommends libc6 libssl-dev locales \
&& apt-get clean \
&& rm --recursive --force /var/lib/apt/lists/* /tmp/* /var/tmp/* \
&& echo en_US.ISO-8859-1 ISO-8859-1 >> /etc/locale.gen \
&& locale-gen

# set working directory
WORKDIR /opt/app

ADD ./vast92 /opt/vast92
ADD ./app /opt/app

RUN mkdir /opt/log

EXPOSE 7777

# Start application 

CMD ["./seasideTrafficLight.sh"]

Важные моменты этого файла:

  1. От Debian: 9-Slim определяет с какого изображения мы начинаем. В этом случае Debian: 9-SLIM, который находится автоматически на Dockerhub.
  2. Мы устанавливаем зависимости vasmalltalk и генерируем необходимые $ Locale Анкет
  3. Мы копируем каталоги vast92 (Vasmalltalk Virtual Machine) и приложение от хоста в контейнер
  4. Мы просто запускаем сценарий Bash ./seasidetrafficlight.sh Анкет

Скрипт Bash так же прост, как вызов виртуальной машины SmallTalk, и передача изображения и файлы INI являются аргументами:

#!/bin/sh

cd /opt/app

export LANG=en_US.iso88591
export VAST_ROOT="/opt/vast92"
export LD_LIBRARY_PATH="${VAST_ROOT}/bin:$LD_LIBRARY_PATH"
$VAST_ROOT/bin/esnx -no_break -msd -mcd -i./seasideTrafficLight-unix.icx -ini:./seasideTrafficLight-unix.ini

cp *.sdf /opt/log

Как бежать с Docker сейчас?

Очевидный первый шаг — установить Docker. Google — ваш друг.

ОК, у нас есть Dockerfile и Docker. Что же нам теперь делать? Первый шаг — «создать» изображение из этого Dockerfile, а во -вторых, чтобы запустить его (что будет означать работа контейнера). Вот как вы могли бы это сделать:

cd $HOME
git clone https://github.com/vasmalltalk/docker-examples.git
cd docker-examples/source/SeasideTrafficLights/Raspberry/
docker build -f ./debian_slim_Dockerfile -t seaside-debian-slim .
docker run -e TZ=America/New_York --mount type=bind,source="$(pwd)",target=/opt/log -p 7777:7777 seaside-debian-slim

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

Что -то очень важное: Контейнеры Docker не сохраняются. Что это значит? Что все, что вы пишете в контейнер, будет стерто/потеряно, как только контейнер будет выключен. Есть много способов добавить «настойчивость», но это очень зависит от того, что вам нужно.

Полезные команды для подтверждения наших шагов Docker Images и контейнеры Docker PS Анкет См. Изображение ниже:

ВАЖНО: Обратите внимание, что размер контейнера составляет всего 71 МБ. Я думаю, что это довольно хорошо для отправной точки.

И, очевидно, вы должны увидеть, как светофора зажигает бег:

Устранение неполадок и докеров

Что -то очень полезное — это прочитать из Stdout или какой -то другой возможный журнал, который могло бы записано приложение в контейнере. Для этого вы можете сделать Docker logs -f 6f7bc37b14e6 (где 6f7bc37b14e6 — это идентификатор контейнера, который вы хотите проверить). Пример:

Другая очень полезная вещь — запустить интерактивный контейнер для данного изображения. Например:

Так что … в основном вы можете открыть интерактивный удар в свой контейнер !!!! Это очень полезно.

Вот Список наиболее полезных команд Docker В случае, если вы хотите исследовать дальше (например, как останавливаться и удалять концерты, и т. Д.).

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

С обычным Docker Команда вы можете запустить один Контейнер за раз и в сингл узел. Но радость этого состоит в том, чтобы x контейнеры были разделены на узлы Y, верно? Итак … ниже тизер моего следующего поста по этому вопросу:

Жидкая ошибка: внутренняя

Надеюсь тебе понравилось,

Обновление: см. Следующее сообщение об этой теме!

Оригинал: «https://dev.to/martinezpeck/getting-started-with-docker-and-smalltalk-4po1»