mirror of
				https://github.com/valentineus/simple-container.git
				synced 2025-11-04 00:39:44 +03:00 
			
		
		
		
	Realization of the basic functionality of creating the container
This commit is contained in:
		
							
								
								
									
										140
									
								
								src/lib/index.js
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								src/lib/index.js
									
									
									
									
									
								
							@@ -1,3 +1,141 @@
 | 
			
		||||
import { Item } from 'ancient-funicular';
 | 
			
		||||
import createDebug from 'debug';
 | 
			
		||||
import Docker from 'dockerode';
 | 
			
		||||
import { statSync } from 'fs';
 | 
			
		||||
 | 
			
		||||
export class Container extends Item {};
 | 
			
		||||
/**
 | 
			
		||||
 * @class Container
 | 
			
		||||
 */
 | 
			
		||||
export default class Container extends Item {
 | 
			
		||||
    /**
 | 
			
		||||
     * @constructs Container
 | 
			
		||||
     * @param {Object} options
 | 
			
		||||
     */
 | 
			
		||||
    constructor(options) {
 | 
			
		||||
        super();
 | 
			
		||||
 | 
			
		||||
        /**
 | 
			
		||||
         * @protected
 | 
			
		||||
         * @type {Object}
 | 
			
		||||
         * @description
 | 
			
		||||
         */
 | 
			
		||||
        this._docker = null;
 | 
			
		||||
 | 
			
		||||
        if (this._isObject(options)) {
 | 
			
		||||
            this._docker = new Docker(options);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            var socket = process.env.DOCKER_SOCKET || '/var/run/docker.sock';
 | 
			
		||||
            var stats = statSync(socket);
 | 
			
		||||
 | 
			
		||||
            if (!stats.isSocket()) {
 | 
			
		||||
                throw new Error('');
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            this._docker = new Docker({
 | 
			
		||||
                socketPath: socket
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {Object|String} options
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    create(options) {
 | 
			
		||||
        var self = this;
 | 
			
		||||
        var name = null;
 | 
			
		||||
 | 
			
		||||
        if (!self._isString(options) && !self._isObject(options)) {
 | 
			
		||||
            throw new Error('The variable \'options\' is not correct.');
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (self._isString(options)) {
 | 
			
		||||
            name = options;
 | 
			
		||||
            options = { Image: name };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (self._isObject(options)) {
 | 
			
		||||
            name = options.Image;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        self._pullImage(name, (error) => {
 | 
			
		||||
            self._handlerError(error);
 | 
			
		||||
            self._createContainer(options);
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    destroy() {}
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {String} name
 | 
			
		||||
     * @param {Function} callback
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    _pullImage(name, callback) {
 | 
			
		||||
        var self = this;
 | 
			
		||||
        self._docker.pull(name).then(stream => {
 | 
			
		||||
            self._docker.modem.followProgress(stream, callback, self.debug);
 | 
			
		||||
        }).catch(error => self._handlerError(error));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {Object} options
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    _createContainer(options) {
 | 
			
		||||
        var self = this;
 | 
			
		||||
        self._docker.createContainer(options).then(container => {
 | 
			
		||||
            /* @todo Регистрация класса */
 | 
			
		||||
        }).catch(error => self._handlerError(error));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {*} value - The variable to check
 | 
			
		||||
     * @returns {Boolean} Result of checking
 | 
			
		||||
     * @description Checks the type of the variable
 | 
			
		||||
     */
 | 
			
		||||
    _isString(value) {
 | 
			
		||||
        return typeof value === 'string';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {*} value - The variable to check
 | 
			
		||||
     * @returns {Boolean} Result of checking
 | 
			
		||||
     * @description Checks the type of the variable
 | 
			
		||||
     */
 | 
			
		||||
    _isObject(value) {
 | 
			
		||||
        return typeof value === 'object';
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {*} error
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    _handlerError(error) {
 | 
			
		||||
        if (!!error) {
 | 
			
		||||
            throw new Error(error);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @protected
 | 
			
		||||
     * @param {*}
 | 
			
		||||
     * @description
 | 
			
		||||
     */
 | 
			
		||||
    debug() {
 | 
			
		||||
        var args = Array.prototype.slice.call(arguments);
 | 
			
		||||
        var debug = createDebug('container');
 | 
			
		||||
        debug.apply(null, args);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user