Я написав 4 пости в цьому блозі, де пояснюю, як використовувати docker у локальному середовищі розробки. Більшість наших проєктів створюються з використанням Docker з нуля, оскільки це один з найпростіших способів залучити нового розробника до проєкту та найзручніший спосіб повернутися до проєкту після деякого часу. Як я використовую docker та docker-compose, майже нічого не змінилося з того часу, окрім кількох покращень у роботі з томами. Однак те, що змінилося давно і я цього не охопив у цьому блозі, це те, що я майже не використовую команду docker compose run
для запуску команд у контейнерах.
Натомість, я маю проксі-команди (локальні команди в моєму $PATH
), які виконують docker compose run
за мене. Є лише одна причина для цього: на моєму локальному комп'ютері майже все dockerized, і я не люблю щоразу вводити docker compose run
, коли хочу виконати команду rails
.
Отже, як виглядає одна з таких проксі-команд? Ось приклад для команди rails
:
#!/bin/bash
docker compose run --rm web rails "$@"
Цей скрипт просто виконує docker-compose run
(одноразову команду) на сервісі web
. У цьому випадку це rails
, і передає $@
як аргумент для rails
, що означає, що все, що ви надішлете у команду rails
, буде передано команді rails
в контейнері. Це дозволяє вам виконувати будь-яку підкоманду rails
, таку як rails c
, rails db:migrate
тощо.
Як ви можете побачити, є одна умова для цього, щоб працювало: всі проєкти, де ви використовуєте команду rails
, повинні мати файл docker-compose.yml
, і цей файл docker-compose.yml
має містити сервіс web
, де знаходиться команда rails
(тобто де живе додаток). Ось тут на допомогу приходить принцип Конвенція замість конфігурації.
Ці команди виявилися надзвичайно корисними для мене, і, як ви можете уявити, у мене є багато таких команд у моєму $PATH
крім rails
: bundle
, rake
, ruby
, npm
, yarn
, standardrb
. Як завжди, вибір за вами.
До цього часу я жодного разу не зіткнувся з відсутністю інструментів, працюючи повністю на Docker. Завдяки цьому трюку я можу навіть запускати певні розширення VS Code, які надзвичайно корисні в моїй повсякденній роботі, такі як Standard Ruby та StandardJS.
Якщо ви ще не спробували, я настійно рекомендую вам це зробити!
Перекладено з: Nativifying a docker development environment