Для получения полного доступа
зарегистрируйтесь.
RSS

Все сниппеты с тэгом «docker»



Roman Zhuravlev
  • Репутация: 6
  • Сниппеты: 3
  • Ревизии: 0

Пусковой скрипт для запуска cron-команд в docker-контенере. Проверяет cron-выражение и запускает команду. Умеет выход по сигналам SIGTERM и SIGINT. В отличии от стандартного cron-демона следующую команду не запустит пока не выполнит предыдущую. Удобно использовать при разработке c docker-compose. В логах докера показывает что запускалось, когда, и с каким результатом.

#!/usr/bin/env php
<?php
/**
 * Скрипт для запуска команды по расписанию, для замены cron-а в сети из docker-контейнеров.
 *
 * Пример команды, которая будет запускаться каждую минуту:
 * docker/php/cron.php "* * * * *" php yii rate/update
 *
 * Зависимости:
 * "mtdowling/cron-expression": "~1.2.0"
 *
 * @author Roman Zhuravlev <zhuravljov@gmail.com>
 */

require(__DIR__ . '/../../vendor/autoload.php');

// Params
$params = $_SERVER['argv'];
array_shift($params);
$expression = array_shift($params);
$command = implode(' ', $params);
$schedule = \Cron\CronExpression::factory($expression);

// Signal handler
$signal = 0;
$signalHandler = function ($sigNum) use (&$signal) {
    $signal = $sigNum;
};
pcntl_signal(SIGTERM, $signalHandler);
pcntl_signal(SIGINT, $signalHandler);

// Loop
printLog('Cron started');
while (true) {
    sleep(60 - time() % 60);
    pcntl_signal_dispatch();
    if ($signal) {
        printLog("Cron stopped by signal $signal");
        exit(0);
    }
    if (!$schedule->isDue()) {
        continue;
    }
    $startedAt = microtime(true);
    printLog("[started] command: $command", $startedAt);
    passthru($command, $exitCode);
    $finishedAt = microtime(true);
    $totalTime = sprintf('%01.3f', $finishedAt - $startedAt);
    printLog("[finished] duration $totalTime s, exit code $exitCode");
    if ($exitCode) {
        exit($exitCode);
    }
}

function printLog($message, $time = null)
{
    echo date('Y-m-d H:i:s', $time ?? time()), ' ' , $message, PHP_EOL;
}
Stephen Berezuev
  • Репутация: 5
  • Сниппеты: 3
  • Ревизии: 1

Для разработки активно использую docker-compose. Иногда необходимо снести все содержимое докера (для выкатывания новой версии с нуля). Для этого я держу у себя следующий шелл-скрипт:

docker-compose down --rmi all -v --remove-orphans;
docker-compose rm -f -s -v;
docker network rm `docker network ls -q`;
docker rm -f `docker ps -qa`;
docker rmi -f `docker images -q`;
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell

ВНИМАНИЕ: Запускать аккуратно, ибо выпиливает без предупреждения все контейнеры, образы, сети и тома докера.

В процессе выполнения иногда кидает ошибки о том, что нечего удалять - это нормально.

dfatt
  • Репутация: 260
  • Сниппеты: 53
  • Ревизии: 7

Если SF3 ставить на Docker, без лишних заморочек с конфигурированием, отдача страницы будет около 30 сек, что очень долго. После долгого чтения гугла, я пробовал вариант с :cached, стало веселее - отдача страницы 2-3 секунды.

Проблема долгой отдачи страницы - много файлов. В папке vendor, cache, много файлов. Для быстрой отдачи страницы, мы должны игнорировать синхронизацию этих папок.

Вот простое решение задачи:

php:
    ...
    volumes:
    	- ${SYMFONY_APP_PATH}:/var/www/src
    	- ${SYMFONY_APP_PATH}/var/logs:/var/www/src/var/logs
    	- /var/www/src/vendor
    	- /var/www/src/var/cache

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

Сниппет,  Bash

docker short command

alex912004
  • Репутация: 8
  • Сниппеты: 3
  • Ревизии: 0

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

docker stop $(docker ps -a -q)

Удалить все контейнеры

docker rm -f $(docker ps -q -a)

Удалить все образы

docker rmi -f $(docker images -q)
Сниппет,  Bash

Enable Docker Remote API

alex912004
  • Репутация: 8
  • Сниппеты: 3
  • Ревизии: 0

Открываем конфиг, редактируем параметры запуска демона, перезапускаем сервис

vi /etc/init/docker.conf 
> DOCKER_OPTS='-H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock'
service docker restart

При запуске через systemctl:

vi /lib/systemd/system/docker.service
> ExecStart=/usr/bin/dockerd daemon -H fd:// -H tcp://0.0.0.0:2373
systemctl daemon-reload