неділя, 11 березня 2018 р.

Школа життя від docker

Люблю Docker за те, що він допомагає мені відкривати нові аспекти роботи Linux та постійно навчатися. Це таке враження оптиміста.

Кити, Нова Зеландія 


В інструкції до всяких модних штук часто написано "Встановіть docker та docker-compose", і щоразу на новій машині мене чекають тут сюрпризи. Я це роблю не так часто, щоб перейматись, але й не так рідко, щоб забувати, що "три простих кроки" завжди затягуються на багато годин на StackOverFlow. Хочу поділитися моїм особистим рейтингом проблем із докером за останній рік: 


  1. Docker встановлюється зараз командою "apt-get install docker.io" . А шо такоє? І де ділися торішні docker-ce, docker-ee? Ця швидкоплинна минучість бізнес-моделей Docker Corporation вже давно не дає провітритись моєму кріслу.
  2. docker-compose можна встановити з apt. Але він там дуже старий. І про це ви дізнаєтесь на 3-му посиланні з ґуґла, пошукавши стектрейс. Звичайно ж треба ставити його через pip, там він новий (всі ж це знають). Але не забудьте, що (цитата) "pip тільки встановлює файли, але не змінює права доступу". Тому "pip install docker-compose" треба або робити з рутової консолі, або виставивши попередньо нормальний umask 0022 . Отут докладніше. Тільки мені здається, що пацики зарелізили тулзу з корявими пермішонами на файли? Чому ні для чого іншого такі трюки не потрібні?
  3. Дозволи. Куди без них у *nix. Але якщо працюєш локально, то і набір інструментів керування пермішонами у тебе один. Із віртуалкою під докером же у тебе не те щоб 2 набори інструментів, а скоріше "більше ніж один". Це як мати набір болтів із гайками, і взяти ще досипати гайок від інших болтів. Найбільше траблів у мене було, коли я намагався загорнути до докера білд-процес. Я хотів, щоб докер взяв локальну теку сорців, у себе там всередині відпроцесив (ізоляція залежностей, оце все), і поклав туди само теку результатів-бінарників. Мені вдалося це зробити єдиним способом, коли я запускав контейнер через CLI, при цьому замаунтивши хостове /etc/passwd всередину контейнера через volume. Отут почитайте, теж люди пишуть цікаве та інтересне. Через docker-compose мені це не вдалося, і в "продакшн" це рішення не пішло, як "неелеґантне".
  4. Врешті, відмінності у синтаксисі одних і тих самих команд у триєдиному інтерфейсі docker. Уважно читайте перед використанням. Як сказано у Дзені Пайтона: "... утримайся від омани вгадати."
    1. Dockerfile, приклади: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
    2. Docker CLI - інтерфейс командного рядка - вибір камікадзе та любителів поґрепати історію власної консолі, хелп: https://docs.docker.com/engine/reference/commandline/cli/
    3. docker-compose - найкращий, як на мене, спосіб, але із своїми обмеженнями та активно збільшуваним номером версії синтаксису. Остання версія 3: https://docs.docker.com/compose/compose-file/compose-versioning/#version-3

Хвала {boh}у, що тепер, на відміну від пари років тому, можна знайти відповіді на ще не задані (саме Вами) питання прямо на сайті docs.docker.com!

Про докер на вінді я взагалі не хочу згадувати. Чи через тестерську карму, чи через щось інше, вже на другому робочому ноуті не можу його запустити через різні обмеження залізячного характеру. Беру інший ноут з Ubuntu, чи віртуалку з нею під VirtualBox. 

Усім терпіння та контейнерізованих мікросервісів!


Немає коментарів: