api.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /*
  2. Copyright 2020 Docker, Inc.
  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. Labels []string
  42. Ports []Port
  43. Platform string
  44. RestartPolicyCondition string
  45. }
  46. // Port represents a published port of a container
  47. type Port struct {
  48. // HostPort is the port number on the host
  49. HostPort uint32
  50. // ContainerPort is the port number inside the container
  51. ContainerPort uint32
  52. // Protocol is the protocol of the port mapping
  53. Protocol string
  54. // HostIP is the host ip to use
  55. HostIP string
  56. }
  57. // ContainerConfig contains the configuration data about a container
  58. type ContainerConfig struct {
  59. // ID uniquely identifies the container
  60. ID string
  61. // Image specifies the iamge reference used for a container
  62. Image string
  63. // Ports provide a list of published ports
  64. Ports []Port
  65. // Labels set labels to the container
  66. Labels map[string]string
  67. // Volumes to be mounted
  68. Volumes []string
  69. // Memlimit
  70. MemLimit formatter.MemBytes
  71. // CPUlimit
  72. CPULimit float64
  73. // Environment variables
  74. Environment []string
  75. // Restart policy condition
  76. RestartPolicyCondition string
  77. }
  78. // ExecRequest contaiens configuration about an exec request
  79. type ExecRequest struct {
  80. Stdin io.Reader
  81. Stdout io.Writer
  82. Stderr io.Writer
  83. Command string
  84. Interactive bool
  85. Tty bool
  86. }
  87. // LogsRequest contains configuration about a log request
  88. type LogsRequest struct {
  89. Follow bool
  90. Tail string
  91. Width int
  92. Writer io.Writer
  93. }
  94. // DeleteRequest contains configuration about a delete request
  95. type DeleteRequest struct {
  96. Force bool
  97. }
  98. // Service interacts with the underlying container backend
  99. type Service interface {
  100. // List returns all the containers
  101. List(ctx context.Context, all bool) ([]Container, error)
  102. // Start starts a stopped container
  103. Start(ctx context.Context, containerID string) error
  104. // Stop stops the running container
  105. Stop(ctx context.Context, containerID string, timeout *uint32) error
  106. // Run creates and starts a container
  107. Run(ctx context.Context, config ContainerConfig) error
  108. // Exec executes a command inside a running container
  109. Exec(ctx context.Context, containerName string, request ExecRequest) error
  110. // Logs returns all the logs of a container
  111. Logs(ctx context.Context, containerName string, request LogsRequest) error
  112. // Delete removes containers
  113. Delete(ctx context.Context, containerID string, request DeleteRequest) error
  114. // Inspect get a specific container
  115. Inspect(ctx context.Context, id string) (Container, error)
  116. }