在 Go 语言中,我们可以使用 github.com/docker/docker/client 包来创建和管理 Docker 容器,并通过挂载数据卷的方式实现数据存储持久化和共享。下面是一个示例代码,展示如何使用数据卷来创建一个新的容器:
package main
import (
"context"
"fmt"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/client"
)
func main() {
ctx := context.Background()
cli, err := client.NewClientWithOpts(client.FromEnv)
if err != nil {
panic(err)
}
hostConfig := &container.HostConfig{
Binds: []string{"/path/on/host:/path/on/container"},
}
containerConfig := &container.Config{
Image: "nginx",
AttachStdout: true,
AttachStderr: true,
Tty: true,
}
resp, err := cli.ContainerCreate(ctx, containerConfig, hostConfig, nil, "")
if err != nil {
panic(err)
}
err = cli.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{})
if err != nil {
panic(err)
}
fmt.Println("Container ID:", resp.ID)
}
上面的示例中,我们通过将 /path/on/host 目录与 /path/on/container 目录进行绑定,从而实现了主机和容器之间的数据共享。这样,在容器内部修改 /path/on/container 目录下的文件时,就会直接影响到主机上对应目录下的文件。
如果想要实现数据存储持久化,可以将数据卷挂载到一个宿主机目录上,并通过 -v 参数指定挂载方式。例如:
hostConfig := &container.HostConfig{
Binds: []string{"/path/on/host:/path/on/container"},
}
其中 /path/on/host 表示宿主机上的目录,/path/on/container 表示容器内部的目录。
在实际使用中,我们还可以通过 docker volume create 命令创建一个数据卷,并通过 -v 参数指定其名称和挂载方式。例如:
hostConfig := &container.HostConfig{
Binds: []string{"my-volume:/path/on/container"},
}
_, err = cli.VolumeCreate(ctx, types.VolumeCreateBody{Name: "my-volume"})
if err != nil {
panic(err)
}
这样,在容器启动时就会自动挂载名为 my-volume 的数据卷,从而实现数据存储持久化和共享。




