Sha256: 9ea611b0464e7ebd06c8182185842bc097e4ff163d3df703b6c077df448a4b17
Contents?: true
Size: 1.93 KB
Versions: 1
Compression:
Stored size: 1.93 KB
Contents
# -*- coding: utf-8 -*- module Mcrain module ContainerController def self.included(klass) klass.extend(ClassMethods) end module ClassMethods attr_writer :server_name def server_name @server_name ||= self.name.split(/::/).last.underscore.to_sym end attr_accessor :container_image, :port end # @return [Docker::Container] def container unless @container options = build_docker_options Mcrain.logger.info("#{self.class.name}#container Docker::Container.create(#{options.inspect})") @container = Docker::Container.create(options) end @container end def container_image self.class.container_image or raise "No container_image for #{self.class.name}" end def host @host ||= URI.parse(ENV["DOCKER_HOST"] || "tcp://localhost").host end def find_portno # 未使用のポートをシステムに割り当てさせてすぐ閉じてそれを利用する tmpserv = TCPServer.new(0) portno = tmpserv.local_address.ip_port tmpserv.close portno end def port @port ||= find_portno end def url @url ||= "#{self.class.server_name}://#{host}:#{port}" end def build_docker_options { 'Image' => container_image, 'HostConfig' => { 'PortBindings' => { "#{self.class.port}/tcp" => [{ 'HostPort' => port.to_s }] } } } end def add_volume_options(r, path_on_container, path_on_host) r['Volumes'] ||= {} r['Volumes'][path_on_container] = {} r['HostConfig']['Binds'] ||= [] r['HostConfig']['Binds'] << "#{path_on_host}:#{path_on_container}" self end def info container.json end def name info["Name"] # .sub(/\A\//, '') end def ip info["NetworkSettings"]["IPAddress"] end def ssh_uri "ssh://root@#{ip}:22" end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
mcrain-0.3.1 | lib/mcrain/container_controller.rb |