首页 > 其他分享 >go语言操作docker创建容器

go语言操作docker创建容器

时间:2023-07-19 12:55:28浏览次数:40  
标签:容器 err 重启 go docker com 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

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

标签:容器,err,重启,go,docker,com,Docker
From: https://www.cnblogs.com/guangdelw/p/17565293.html

相关文章

  • 浅谈Java容器
    Java容器容器类是Java以类库的形式供用户开发程序时可直接使用的各种数据结构。所谓数据结构就是以某种方式将数据组织在一起,并存储在计算机中。数据结构不仅可以存储数据,还支持访问和处理数据的操作。在面向对象思想里,一种数据结构被认为是一个容器。数组是一种简单的数据结构,......
  • docker-compose创建mongo副本集
    DockerCompose创建MongoDB副本集在这篇文章中,我将指导一名刚入行的开发者如何使用DockerCompose来创建一个MongoDB副本集。以下是整个过程的步骤:步骤描述1创建DockerCompose文件2定义MongoDB服务3配置副本集4构建和启动容器接下来,我将逐步说明每个......
  • docker-compose 私有仓库搭建 支持https
    DockerCompose私有仓库搭建支持HTTPSDocker是一个非常流行的容器化平台,允许用户将应用程序和其依赖项打包为一个独立的轻量级容器,并且可以在任何地方运行。DockerCompose是Docker官方提供的一个工具,用于定义和运行多个容器的应用程序。在某些情况下,我们可能需要在本地搭......
  • docker-compose 国内用户安装
    DockerCompose国内用户安装DockerCompose是一个用于定义和管理多个Docker容器的工具。它允许用户通过一个单独的配置文件来定义应用程序的多个服务,并且可以使用简单的命令来启动、停止和管理这些服务。在国内,由于一些原因,使用DockerCompose可能会遇到一些问题。本文将介绍如何......
  • docker-compose 更新文件
    DockerCompose文件更新流程作为一名经验丰富的开发者,你要教会这位刚入行的小白如何实现“docker-compose更新文件”。下面将详细介绍整个流程,并给出每一步所需的代码。流程概览下图展示了实现“docker-compose更新文件”的流程。步骤操作步骤一停止正在运行的容......
  • docker-compose 安装springboot
    DockerCompose安装SpringBoot在开发和部署SpringBoot应用程序时,使用DockerCompose是一个非常方便和高效的方法。DockerCompose可以帮助我们定义和运行多个Docker容器,从而简化了应用程序的部署过程。本文将介绍如何使用DockerCompose安装和运行一个简单的Spring......
  • 在本地启动一个 Docker 的 MySQL 服务
    要在本地启动一个Docker的MySQL服务,并允许其他Docker容器连接到该数据库,您可以按照以下步骤操作:1.确保已在本地安装了Docker。您可以在终端中运行`docker--version`命令来检查Docker是否已正确安装。2.使用以下命令来拉取MySQL8.0镜像:```dockerpullmysq......
  • mysql 5.7 修改密码 docker 导出容器
    MISCONFRedisisconfiguredtosaveRDBsnapshots,butiscurrentlynotabletopersistondisk.Commandsthatmaymodifythedatasetaredisabled.PleasecheckRedislogsfordetailsabouttheerror updateusersetauthentication_string=password('......
  • django 批量使用 同一个表的字段做转换
    使用结束减去开始时间ExamRecord.objects.filter(over_time__lt=datetime.datetime.now(),submit=1).update(submit=3,use_time=ExpressionWrapper(Extract(F('over_time')-F('start_time'),'epoch')......
  • docker开启远程访问,并添加TLS证书认证
    默认情况下,docker是无法远程访问的但是有些场景下,是需要远程访问的新建存放证书的目录mkdir/etc/docker/certs.dcd/etc/docker/certs.d生成证书生成ca的私钥opensslgenrsa-aes256-passoutpass:123456-outca-key.pem4096生成CA证书opensslreq-new-x509-pas......