Class: Docker::Container
- Inherits:
-
Object
- Object
- Docker::Container
- Includes:
- Base
- Defined in:
- lib/docker/container.rb
Overview
This class represents a Docker Container. It’s important to note that nothing is cached so that the information is always up to date.
Instance Attribute Summary
Attributes included from Base
Class Method Summary collapse
-
.all(opts = {}, conn = Docker.connection) ⇒ Object
Return all of the Containers.
-
.create(opts = {}, conn = Docker.connection) ⇒ Object
Create a new Container.
-
.get(id, opts = {}, conn = Docker.connection) ⇒ Object
Return the container with specified ID.
Instance Method Summary collapse
-
#attach(options = {}, &block) ⇒ Object
Attach to a container’s standard streams / logs.
-
#commit(options = {}) ⇒ Object
Create an Image from a Container’s change.s.
- #copy(path, &block) ⇒ Object
-
#export(&block) ⇒ Object
Export the Container as a tar.
-
#remove(options = {}) ⇒ Object
(also: #delete)
remove container.
-
#run(cmd, time = 1000) ⇒ Object
Given a command and an optional number of seconds to wait for the currently executing command, creates a new Container to run the specified command.
-
#to_s ⇒ Object
Return a String representation of the Container.
-
#top(opts = {}) ⇒ Object
Return a List of Hashes that represents the top running processes.
-
#wait(time = nil) ⇒ Object
Wait for the current command to finish executing.
Methods included from Base
Class Method Details
.all(opts = {}, conn = Docker.connection) ⇒ Object
Return all of the Containers.
147 148 149 150 |
# File 'lib/docker/container.rb', line 147 def self.all(opts = {}, conn = Docker.connection) hashes = Docker::Util.parse_json(conn.get('/containers/json', opts)) || [] hashes.map { |hash| new(conn, hash) } end |
.create(opts = {}, conn = Docker.connection) ⇒ Object
Create a new Container.
130 131 132 133 134 135 136 137 |
# File 'lib/docker/container.rb', line 130 def self.create(opts = {}, conn = Docker.connection) name = opts.delete('name') query = {} query['name'] = name if name resp = conn.post('/containers/create', query, :body => opts.to_json) hash = Docker::Util.parse_json(resp) || {} new(conn, hash) end |
.get(id, opts = {}, conn = Docker.connection) ⇒ Object
Return the container with specified ID
140 141 142 143 144 |
# File 'lib/docker/container.rb', line 140 def self.get(id, opts = {}, conn = Docker.connection) container_json = conn.get("/containers/#{URI.encode(id)}/json", opts) hash = Docker::Util.parse_json(container_json) || {} new(conn, hash) end |
Instance Method Details
#attach(options = {}, &block) ⇒ Object
Attach to a container’s standard streams / logs.
42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/docker/container.rb', line 42 def attach( = {}, &block) opts = { :stream => true, :stdout => true, :stderr => true }.merge() # Creates list to store stdout and stderr messages msgs = Docker::Messages.new connection.post( path_for(:attach), opts, :response_block => attach_for(block, msgs) ) [msgs., msgs.] end |
#commit(options = {}) ⇒ Object
Create an Image from a Container’s change.s
57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/docker/container.rb', line 57 def commit( = {}) .merge!('container' => self.id[0..7]) # [code](https://github.com/dotcloud/docker/blob/v0.6.3/commands.go#L1115) # Based on the link, the config passed as run, needs to be passed as the # body of the post so capture it, remove from the options, and pass it via # the post body config = .delete('run') hash = Docker::Util.parse_json(connection.post('/commit', , :body => config.to_json)) Docker::Image.send(:new, self.connection, hash) end |
#copy(path, &block) ⇒ Object
121 122 123 124 125 126 127 |
# File 'lib/docker/container.rb', line 121 def copy(path, &block) connection.post(path_for(:copy), {}, :body => { "Resource" => path }.to_json, :response_block => block ) self end |
#export(&block) ⇒ Object
Export the Container as a tar.
36 37 38 39 |
# File 'lib/docker/container.rb', line 36 def export(&block) connection.get(path_for(:export), {}, :response_block => block) self end |
#remove(options = {}) ⇒ Object Also known as: delete
remove container
115 116 117 118 |
# File 'lib/docker/container.rb', line 115 def remove( = {}) connection.delete("/containers/#{self.id}", ) nil end |
#run(cmd, time = 1000) ⇒ Object
Given a command and an optional number of seconds to wait for the currently executing command, creates a new Container to run the specified command. If the command that is currently executing does not return a 0 status code, an UnexpectedResponseError is raised.
27 28 29 30 31 32 33 |
# File 'lib/docker/container.rb', line 27 def run(cmd, time = 1000) if (code = tap(&:start).wait(time)['StatusCode']).zero? commit.run(cmd).tap(&:start) else raise UnexpectedResponseError, "Command returned status code #{code}." end end |
#to_s ⇒ Object
Return a String representation of the Container.
71 72 73 |
# File 'lib/docker/container.rb', line 71 def to_s "Docker::Container { :id => #{self.id}, :connection => #{self.connection} }" end |
#top(opts = {}) ⇒ Object
Return a List of Hashes that represents the top running processes.
7 8 9 10 11 12 13 14 |
# File 'lib/docker/container.rb', line 7 def top(opts = {}) resp = Docker::Util.parse_json(connection.get(path_for(:top), opts)) if resp['Processes'].nil? [] else resp['Processes'].map { |ary| Hash[resp['Titles'].zip(ary)] } end end |
#wait(time = nil) ⇒ Object
Wait for the current command to finish executing. Default wait time is ‘Excon.options`.
18 19 20 21 |
# File 'lib/docker/container.rb', line 18 def wait(time = nil) resp = connection.post(path_for(:wait), nil, :read_timeout => time) Docker::Util.parse_json(resp) end |