go语言操作docker创建容器

开启远程api的方式 https://www.cnblogs.com/guangdelw/p/17562539.html

代码部分

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/docker/docker/api/types"
	"github.com/docker/docker/api/types/container"
	"github.com/docker/docker/api/types/mount"
	"github.com/docker/docker/client"
	"github.com/docker/go-connections/nat"
)

func main() {
	// 设置远程Docker守护进程的地址
	remoteDockerURL := "tcp://10.0.0.12:2376" // 将remote-docker-host替换为远程Docker守护进程的IP地址或域名

	// 创建Docker客户端,并指定远程Docker守护进程地址
	cli, err := client.NewClientWithOpts(
		client.WithHost(remoteDockerURL),
		// client.WithVersion("1.41"),
		client.WithAPIVersionNegotiation(),
	)
	if err != nil {
		fmt.Println("创建docker客户端失败:", err)
		os.Exit(1)
	}
	// 配置要启动的容器
	containerConfig := &container.Config{
		Image: "nginx:latest", // 指定要使用的镜像
		// Cmd:   []string{"echo", "Hello, Docker!"}, // 指定容器启动时要执行的命令
	}

	// 配置容器自动重启
	hostConfig := &container.HostConfig{
		RestartPolicy: container.RestartPolicy{
			Name: "always", // 设置重启策略为"always",容器将总是自动重启
			// 可选的重启策略:
			// - "no":无重启策略
			// - "always":容器总是自动重启
			// - "on-failure":容器在非零退出状态时重启(默认最多重启3次)
			// - "unless-stopped":除非手动停止,否则容器总是自动重启
		},
		PortBindings: nat.PortMap{
			"80/tcp": []nat.PortBinding{{HostIP: "0.0.0.0", HostPort: "8080"}}, // 将容器的80端口映射到宿主机的8080端口
		},
		Mounts: []mount.Mount{
			{
				Type:     mount.TypeBind,
				Source:   "/data/html",            // 宿主机上要挂载的文件夹路径
				Target:   "/usr/share/nginx/html", // 容器内挂载的路径
				ReadOnly: false,                   // 是否只读
			},
		},
	}
    // 设置容器名称
	containerName := "nginx111"
	// 创建并启动容器
	resp, err := cli.ContainerCreate(context.Background(), containerConfig, hostConfig, nil, nil, containerName)
	if err != nil {
		fmt.Println("容器创建失败:", err)
		return
	}

	// 启动容器
	if err := cli.ContainerStart(context.Background(), resp.ID, types.ContainerStartOptions{}); err != nil {
		fmt.Println("容器启动失败:", err)
		return
	}

	fmt.Println("容器ID:", resp.ID)

	// 关闭Docker客户端连接
	defer cli.Close()
}

创建了一个名字为 nginx111 的容器,镜像是使用的 nginx:latest ,映射了端口 8080:80 ,映射了文件夹 /data/html:/usr/share/nginx/html

映射文件夹的时候需要注意,宿主机的文件夹一定要提前存在,否则无法创建

posted @ 2023-07-19 12:45  厚礼蝎  阅读(267)  评论(0编辑  收藏  举报