Ранее на этой неделе я опубликовал руководство Как настроить локальную среду WordPress с помощью Docker. Если вы это прочитаете, то этот пост вам пригодится.

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

Многие из нас используют wp-cli для управления установками WordPress. Если вы используете Docker для управления локальной разработкой, то вам, вероятно, интересно, как можно использовать wp-cli, поскольку ваш контейнер теперь является виртуальной средой. Люди до сих пор не привыкли использовать Docker, поэтому идея использовать его для управления инструментами cli все еще немного сбивает с толку. К счастью, я уже сделал за вас всю работу!

Если вам понравилось это руководство или вы хотите добавить что-то в разговор, обязательно напишите мне в Twitter, и я свяжусь с вами.

Быстрый и грязный

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

Давайте углубимся в подробности…

Настройка docker-compose

Если вы читали мой последний пост, у вас будет файл docker-compose.yml, который выглядит так внутри вашего каталога WordPress:

my-wpdb:
  image: mariadb
  ports:
    - "8081:3306"
  environment:
    MYSQL_ROOT_PASSWORD: ChangeMeIfYouWant
    
my-wp:
  image: wordpress
  volumes:
    - ./:/var/www/html
  ports:
    - "8080:80"
  links:
    - my-wpdb:mysql
  environment:
    WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

Давайте добавим в наш стек контейнер wp-cli ...

my-wpcli:
  image: tatemz/wp-cli
  volumes_from:
    - my-wp
  links:
    - my-wpdb:mysql
  entrypoint: wp  
  command: "--info"

С последнего раза здесь появилось несколько новинок:

  • Во-первых, мы говорим этому контейнеру использовать те же синхронизированные тома, что и наш контейнер my-wp (если быть точным, / var / www / html). Таким образом, wp-cli получит доступ к нашим файлам WordPress.
  • Кроме того, мы связываем с ним контейнер my-wpdb, чтобы wp-cli мог предоставить общий доступ к базе данных. Если вы помните из нашего последнего сообщения, это назначение псевдонима my-wpdb как «mysql» - это то же самое, что и константа «DB_HOST» в wp-config.
  • Наконец, мы переопределяем точку входа по умолчанию и команду, которую этот контейнер будет выполнять при запуске. Поскольку мой настраиваемый контейнер tatemz / wp-cli наследует функциональность от контейнера wordpress, команда по умолчанию, запускающая Apache, будет запущена. В этом случае нашей точкой входа будет команда wp, а подкоманда, которую мы хотим запустить, - это команда --info. При запуске нашего контейнера my-wpcli он быстро закроется после вывода вывода команды wp --info.

Контейнеры Docker чаще всего представляют собой крошечные простые серверы Linux. Следовательно, если команда запущена, которая не завершается, контейнер Docker останется в сети. Однако, если команда завершится, контейнер остановится. Вы всегда можете проверить, какие контейнеры запущены на вашем компьютере:

$ docker ps

Теперь мы готовы к запуску команд wp-cli ...

Запуск команд с помощью docker-compose

Нам нужно использовать наш контейнер my-wpcli, который мы добавили в наш стек, чтобы запускать только одноразовые команды. Другими словами, нам не нужен my-wpcli для работы как службы - только как инструмент cli:

$ docker-compose run --rm my-wpcli

Давайте разберемся с этим: команда «run» указывает docker-compose развернуть ваш контейнер и запустить настраиваемую команду. Во-первых, любые аргументы, которые мы передаем в docker-compose, должны появляться перед именем контейнера. В нашем случае мы передаем --rm только в качестве аргумента; это просто удаляет контейнер сразу после завершения команды «wp --info». Если бы мы этого не сделали, то создали бы потерянный контейнер.

$ docker-compose run --rm my-wpcli

Все, что следует после имени контейнера, переопределит настройку «команды», которую мы установили выше. В этом случае значение по умолчанию - «--info», но мы можем заменить его на что-нибудь полезное, например:

$ docker-compose run -rm my-wpcli post list

Это то же самое, что выполнить следующую команду wp-cli

$ wp post list

Чтобы упростить процесс, мы можем сохранить эту команду как псевдоним:

$ alias wp="docker-compose run -rm my-wpcli"
$ wp post list

Теперь летим под своим псевдонимом!

$ wp core install --url="localhost:8080" --title="WordPress" --admin_user="admin" --admin_password="prollynotadmin" --admin_email="[email protected]"
$ wp user create jimmy [email protected] --role="administrator"
$ wp media regenerate -y
$ wp search-replace localhost:8080 productiondomain.com
$ wp db export site-dump.sql

Более простой способ

Я решил расширить свое объяснение, чтобы показать вам, как работать с docker-compose для выполнения одноразовых команд, однако из-за этого наш стек теперь стал больше. Поскольку мой образ контейнера tatemz / wp-cli наследует функциональность от официального контейнера wordpress, мы можем упростить весь этот процесс, изменив наш стек my-wp для использования моего пользовательского образа:

my-wp:
  image: tatemz/wp-cli
  volumes:
    - ./:/var/www/html
  ports:
    - "8080:80"
  links:
    - my-wpdb:mysql
  environment:
    WORDPRESS_DB_PASSWORD: ChangeMeIfYouWant

Поскольку мы не переопределяем параметры «точки входа» или «команды», запускаемый по умолчанию сценарий запускает и инициализирует Apache. Как и в предыдущем посте, приступим к нашему стеку.

$ docker-compose up -d

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

$ docker exec my-wp wp post list

Вам понравилось это руководство? Оставьте мне комментарий ниже или в Твиттере.