docker:go语言启动docker container

该博客介绍了如何在Go语言环境中通过Docker API下载并运行MongoDB容器。首先,从GitHub获取Docker的Go客户端,接着使用`docker run`命令拉取mongo:4.4镜像。然后,展示如何在Go代码中创建并启动MongoDB容器,将27017端口映射到本地,最后显示分配的端口并删除容器。
摘要由CSDN通过智能技术生成

1、下载go的docker客户端
go get github.com/docker/docker/client

2、docker拉取镜像
docker run -p 27018:27018 mongo:4.4

3、golang代码运行 mongo:4.4

package main

import (
	"context"
	"fmt"
	"time"

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

func main() {
	//创建一个本机docker客户端
	c, err := client.NewEnvClient()
	if err != nil {
		panic(err)
	}

	ctx := context.Background()

	resp, err := c.ContainerCreate(ctx, &container.Config{
		Image: "mongo:4.4",
		ExposedPorts: nat.PortSet{
			"27017/tcp": {},
		},
	}, &container.HostConfig{
		PortBindings: nat.PortMap{
			"27017/tcp": []nat.PortBinding{
				{
					HostIP:   "127.0.0.1",
					HostPort: "0", //值为0表示任意找一个空闲的端口 //HostPort: "27018",
				},
			},
		},
	}, nil, nil, "")
	if err != nil {
		panic(err)
	}

	//运行
	err = c.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{})
	if err != nil {
		panic(err)
	}

	//打印程序选择了本机哪个端口去隐射到mongo中
	inspRes, err := c.ContainerInspect(ctx, resp.ID)
	if err != nil {
		panic(err)
	}
	fmt.Printf("listening as %+v\n", inspRes.NetworkSettings.Ports["27017/tcp"][0].HostPort)

	fmt.Println("container started")
	time.Sleep(5 * time.Second)
	fmt.Println("killing container")

	//删除container
	err = c.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{
		Force: true,
	})
	if err != nil {
		panic(err)
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值