使用 artisan 自动化您的 docker 容器

v0.2.1 2016-12-06 12:31 UTC

This package is not auto-updated.

Last update: 2024-09-28 19:36:31 UTC


README

在 Laravel 内部自动化您的 docker 容器

设置

需求

Docker >= 1.13

Laravel >= 5.3.*

PHP >= 5.6.4

安装

composer require idrislab/laravel-docker-containers

设置以下环境变量(在您的 .env 文件中)

DOCKER_SOCKET=unix:///var/run/docker.sock

创建一个新的 artisan 命令

php artisan make:command Containers

app/Console/Kernel.php 中将新命令注册到 artisan

protected $commands = [
       Commands\Containers::class,
  ];

更新您的 Containers 命令以注册默认提供的容器

<?php

namespace App\Console\Commands;

use luisgros\docker\containers\MySQL;
use luisgros\docker\containers\Redis;
use luisgros\docker\ContainersCommand;

class Containers extends ContainersCommand
{
    protected $containers = [
        MySQL::class,
        Redis::class,
    ];
}

用法

php artisan containers <start|stop|restart> [container(s)]

示例

启动所有容器

php artisan containers start

停止和启动多个容器

php artisan containers start mysql redis

停止一个容器

php artisan containers stop mysql

添加自定义容器

app/ 目录中创建一个名为 Containers 的目录,并创建一个名为 MySQLGroupReplication.php 的文件,内容如下:

<?php
namespace App\Containers;

use luisgros\docker\containers\Container;

class MySQLGroupReplication extends Container
{
    /**
     * @var string
     */
    public $repo = 'mysql/mysql-gr';
    /**
     * @var string
     */
    public $tag = 'latest';
    /**
     * @var string
     */
    public $network = 'group1';
    /**
     * @var string
     */
    public $instances = 3;

    /**
     * @return array
     */
    public function runCommand()
    {
        return [
                '-d --rm --net=group1 -e MYSQL_ROOT_PASSWORD=ENV[DB_PASSWORD] \\'.
                '-e MYSQL_REPLICATION_USER=ENV[DB_PASSWORD] -e MYSQL_REPLICATION_PASSWORD=ENV[DB_PASSWORD] \\'.
                'mysql/mysql-gr --group_replication_group_seeds=\'ENV[CONTAINER_I2]:6606,ENV[CONTAINER_I3]:6606\' \\'.
                '--server-id=ENV[INSTANCE_ID]',

                '-d --rm --net=group1 -e MYSQL_ROOT_PASSWORD=ENV[DB_PASSWORD] \\'.
                '-e MYSQL_REPLICATION_USER=ENV[DB_PASSWORD] -e MYSQL_REPLICATION_PASSWORD=ENV[DB_PASSWORD] \\'.
                'mysql/mysql-gr --group_replication_group_seeds=\'ENV[CONTAINER_I1]:6606,ENV[CONTAINER_I3]:6606\' \\'.
                '--server-id=ENV[INSTANCE_ID]',

                '-d --rm --net=group1 -e MYSQL_ROOT_PASSWORD=ENV[DB_PASSWORD] \\'.
                '-e MYSQL_REPLICATION_USER=ENV[DB_PASSWORD] -e MYSQL_REPLICATION_PASSWORD=ENV[DB_PASSWORD] \\'.
                'mysql/mysql-gr --group_replication_group_seeds=\'ENV[CONTAINER_I1]:6606,ENV[CONTAINER_I2]:6606\' \\'.
                '--server-id=ENV[INSTANCE_ID]',
        ];
    }

    public function preCommand()
    {
        $this->docker('network create group1 &>/dev/null');
    }
}

更新您的 app/Console/Commands/Containers.php 命令以注册新容器

<?php

namespace App\Console\Commands;

use App\Containers\MySQLGroupReplication;
use luisgros\docker\containers\MySQL;
use luisgros\docker\containers\Redis;
use luisgros\docker\ContainersCommand;

class Containers extends ContainersCommand
{
    protected $containers = [
        MySQL::class,
        Redis::class,
        MySQLGroupReplication::class,
    ];
}

启动您的容器

php artisan containers start mysqlgroupreplication