api.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /*
  2. Copyright 2020 Docker Compose CLI authors
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package containers
  14. import (
  15. "context"
  16. "io"
  17. "github.com/docker/compose-cli/formatter"
  18. )
  19. const (
  20. // RestartPolicyAny Always restarts
  21. RestartPolicyAny = "any"
  22. // RestartPolicyNone Never restarts
  23. RestartPolicyNone = "none"
  24. // RestartPolicyOnFailure Restarts only on failure
  25. RestartPolicyOnFailure = "on-failure"
  26. )
  27. // RestartPolicyList all available restart policy values
  28. var RestartPolicyList = []string{RestartPolicyNone, RestartPolicyAny, RestartPolicyOnFailure}
  29. // Container represents a created container
  30. type Container struct {
  31. ID string
  32. Status string
  33. Image string
  34. Command string
  35. CPUTime uint64
  36. CPULimit float64
  37. MemoryUsage uint64
  38. MemoryLimit uint64
  39. PidsCurrent uint64
  40. PidsLimit uint64
  41. Config *RuntimeConfig `json:",omitempty"`
  42. Labels []string `json:",omitempty"`
  43. Ports []Port `json:",omitempty"`
  44. Platform string
  45. RestartPolicyCondition string
  46. }
  47. // RuntimeConfig config of a created container
  48. type RuntimeConfig struct {
  49. Env map[string]string `json:",omitempty"`
  50. // FQDN is the fqdn to use
  51. FQDN string `json:"fqdn,omitempty"`
  52. }
  53. // Port represents a published port of a container
  54. type Port struct {
  55. // HostPort is the port number on the host
  56. HostPort uint32
  57. // ContainerPort is the port number inside the container
  58. ContainerPort uint32
  59. // Protocol is the protocol of the port mapping
  60. Protocol string
  61. // HostIP is the host ip to use
  62. HostIP string
  63. }
  64. // ContainerConfig contains the configuration data about a container
  65. type ContainerConfig struct {
  66. // ID uniquely identifies the container
  67. ID string
  68. // Image specifies the iamge reference used for a container
  69. Image string
  70. // Command are the arguments passed to the container's entrypoint
  71. Command []string
  72. // Ports provide a list of published ports
  73. Ports []Port
  74. // Labels set labels to the container
  75. Labels map[string]string
  76. // Volumes to be mounted
  77. Volumes []string
  78. // Memlimit
  79. MemLimit formatter.MemBytes
  80. // CPUlimit
  81. CPULimit float64
  82. // Environment variables
  83. Environment []string
  84. // Restart policy condition
  85. RestartPolicyCondition string
  86. // DomainName Container NIS domain name
  87. DomainName string
  88. }
  89. // ExecRequest contaiens configuration about an exec request
  90. type ExecRequest struct {
  91. Stdin io.Reader
  92. Stdout io.Writer
  93. Stderr io.Writer
  94. Command string
  95. Interactive bool
  96. Tty bool
  97. }
  98. // LogsRequest contains configuration about a log request
  99. type LogsRequest struct {
  100. Follow bool
  101. Tail string
  102. Width int
  103. Writer io.Writer
  104. }
  105. // DeleteRequest contains configuration about a delete request
  106. type DeleteRequest struct {
  107. Force bool
  108. }
  109. // Service interacts with the underlying container backend
  110. type Service interface {
  111. // List returns all the containers
  112. List(ctx context.Context, all bool) ([]Container, error)
  113. // Start starts a stopped container
  114. Start(ctx context.Context, containerID string) error
  115. // Stop stops the running container
  116. Stop(ctx context.Context, containerID string, timeout *uint32) error
  117. // Kill stops the running container
  118. Kill(ctx context.Context, containerID string, signal string) error
  119. // Run creates and starts a container
  120. Run(ctx context.Context, config ContainerConfig) error
  121. // Exec executes a command inside a running container
  122. Exec(ctx context.Context, containerName string, request ExecRequest) error
  123. // Logs returns all the logs of a container
  124. Logs(ctx context.Context, containerName string, request LogsRequest) error
  125. // Delete removes containers
  126. Delete(ctx context.Context, containerID string, request DeleteRequest) error
  127. // Inspect get a specific container
  128. Inspect(ctx context.Context, id string) (Container, error)
  129. }