Class: VagrantPlugins::Vocker::DockerClient

Inherits:
Object
  • Object
show all
Defined in:
lib/vocker/docker_client.rb

Instance Method Summary collapse

Constructor Details

#initialize(machine) ⇒ DockerClient

Returns a new instance of DockerClient.



6
7
8
# File 'lib/vocker/docker_client.rb', line 6

def initialize(machine)
  @machine = machine
end

Instance Method Details

#container_exist?(id) ⇒ Boolean

Returns:

  • (Boolean)


50
51
52
# File 'lib/vocker/docker_client.rb', line 50

def container_exist?(id)
  @machine.communicate.test("sudo docker ps -a -q | grep -q #{id}")
end

#container_running?(id) ⇒ Boolean

Returns:

  • (Boolean)


60
61
62
# File 'lib/vocker/docker_client.rb', line 60

def container_running?(id)
  @machine.communicate.test("sudo docker ps -q | grep #{id}")
end

#create_container(config) ⇒ Object



64
65
66
67
68
69
70
71
72
# File 'lib/vocker/docker_client.rb', line 64

def create_container(config)
  args = "-cidfile=#{config[:cidfile]} -d"
  args << " -dns=#{config[:dns]}" if config[:dns]
  args << " #{config[:additional_run_args]}" if config[:additional_run_args]
  @machine.communicate.sudo %[
    rm -f #{config[:cidfile]}
    docker run #{args} #{config[:image]} #{config[:cmd]}
  ]
end

#daemon_running?Boolean

Returns:

  • (Boolean)


24
25
26
# File 'lib/vocker/docker_client.rb', line 24

def daemon_running?
  @machine.communicate.test('test -f /var/run/docker.pid')
end

#pull_images(*images) ⇒ Object



10
11
12
13
14
15
16
# File 'lib/vocker/docker_client.rb', line 10

def pull_images(*images)
  @machine.communicate.tap do |comm|
    images.each do |image|
      comm.sudo("docker images | grep -q #{image} || docker pull #{image}")
    end
  end
end

#run(containers) ⇒ Object



28
29
30
31
32
33
34
35
36
# File 'lib/vocker/docker_client.rb', line 28

def run(containers)
  containers.each do |name, config|
    cids_dir = "/var/lib/vocker/cids"
    config[:cidfile] ||= "#{cids_dir}/#{Digest::SHA1.hexdigest name}"

    @machine.communicate.sudo("mkdir -p #{cids_dir}")
    run_container(config)
  end
end

#run_container(config) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
# File 'lib/vocker/docker_client.rb', line 38

def run_container(config)
  raise "Container's cidfile was not provided!" unless config[:cidfile]

  id = "$(cat #{config[:cidfile]})"

  if container_exist?(id)
    start_container(id)
  else
    create_container(config)
  end
end

#start_container(id) ⇒ Object



54
55
56
57
58
# File 'lib/vocker/docker_client.rb', line 54

def start_container(id)
  unless container_running?(id)
    @machine.communicate.sudo("docker start #{id}")
  end
end

#start_serviceObject



18
19
20
21
22
# File 'lib/vocker/docker_client.rb', line 18

def start_service
  if !daemon_running? && @machine.guest.capability?(:docker_start_service)
    @machine.guest.capability(:docker_start_service)
  end
end