github.com/zhouyu0/docker-note@v0.0.0-20190722021225-b8d3825084db/integration/internal/container/container.go (about) 1 package container 2 3 import ( 4 "context" 5 "runtime" 6 "testing" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/api/types/container" 10 "github.com/docker/docker/api/types/network" 11 "github.com/docker/docker/client" 12 "gotest.tools/assert" 13 ) 14 15 // TestContainerConfig holds container configuration struct that 16 // are used in api calls. 17 type TestContainerConfig struct { 18 Name string 19 Config *container.Config 20 HostConfig *container.HostConfig 21 NetworkingConfig *network.NetworkingConfig 22 } 23 24 // Create creates a container with the specified options 25 // nolint: golint 26 func Create(t *testing.T, ctx context.Context, client client.APIClient, ops ...func(*TestContainerConfig)) string { // nolint: golint 27 t.Helper() 28 cmd := []string{"top"} 29 if runtime.GOOS == "windows" { 30 cmd = []string{"sleep", "240"} 31 } 32 config := &TestContainerConfig{ 33 Config: &container.Config{ 34 Image: "busybox", 35 Cmd: cmd, 36 }, 37 HostConfig: &container.HostConfig{}, 38 NetworkingConfig: &network.NetworkingConfig{}, 39 } 40 41 for _, op := range ops { 42 op(config) 43 } 44 45 c, err := client.ContainerCreate(ctx, config.Config, config.HostConfig, config.NetworkingConfig, config.Name) 46 assert.NilError(t, err) 47 48 return c.ID 49 } 50 51 // Run creates and start a container with the specified options 52 // nolint: golint 53 func Run(t *testing.T, ctx context.Context, client client.APIClient, ops ...func(*TestContainerConfig)) string { // nolint: golint 54 t.Helper() 55 id := Create(t, ctx, client, ops...) 56 57 err := client.ContainerStart(ctx, id, types.ContainerStartOptions{}) 58 assert.NilError(t, err) 59 60 return id 61 }