def push(creds = nil, options = {}, &block)
repo_tag = options.delete(:repo_tag) || ensure_repo_tags.first
raise ArgumentError, "Image is untagged" if repo_tag.nil?
repo, tag = Docker::Util.parse_repo_tag(repo_tag)
raise ArgumentError, "Image does not have a name to push." if repo.nil?
body = ""
credentials = creds || Docker.creds || {}
headers = Docker::Util.build_auth_header(credentials)
opts = {:tag => tag}.merge(options)
connection.post("/images/#{repo}/push", opts, :headers => headers,
:response_block => self.class.response_block(body, &block))
self
end