小编给大家分享一下Docker中volumes文件如何实现映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!实现通过docker-compose配置文件volum
小编给大家分享一下Docker中volumes文件如何实现映射,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
通过docker-compose配置文件volumes参数
配置文件示例:
volumes: - /var/run/:/host/var/run/ - ./channel-artifacts:/var/hyperledger/configs - ./fabric_logs:/tmp/fabric_logs/
把容器中/tmp/fabric_logs目录映射到宿主机当前目录下的./fabric_logs目录下。这两个目录会共享数据。
代码中创建容器时添加:
func (vm *DockerVM) createContainer(ctxt context.Context, client dockerClient, imageID string, containerID string, args []string, env []string, attachStdout bool) error { volumes := make(map[string]struct{}) var mounts []docker.Mount var source string var destination string var fabricCfgPath = os.Getenv("FABRIC_CFG_PATH") var configName string _, err := os.Stat(fabricCfgPath) if err == nil { configName = strings.ToLower(Peer_Prefix) config := viper.New() config.SetConfigName(configName) config.AddConfigPath(fabricCfgPath) config.ReadInConfig() config.SetEnvPrefix("CORE") config.AutomaticEnv() replacer := strings.NewReplacer(".", "_") config.SetEnvKeyReplacer(replacer) config.SetConfigType("yaml") destination = config.GetString("logging.logpath") //fmt.Println(destination) } if destination == "" { destination = "/tmp/fabric_logs/" } source = "/tmp/chaincode_logs/" + containerID volumes[destination] = struct{}{} mount := docker.Mount{ Name: "bind", Source: source, Destination: destination, Mode: "rw", RW: true, Driver: "rprivate", } mounts = append(mounts, mount) config := docker.Config{Cmd: args, Image: imageID, Env: env, Volumes: volumes, Mounts: mounts, AttachStdout: attachStdout, AttachStderr: attachStdout} hostConfig := getDockerHostConfig() hostConfig.Binds = []string{ source + ":" + destination + ":rw", } copts := docker.CreateContainerOptions{Name: containerID, Config: &config, HostConfig: hostConfig} dockerLogger.Debugf("Create container: %s", containerID) _, err = client.CreateContainer(copts) if err != nil { return err } dockerLogger.Debugf("Created container: %s", imageID) return nil}
其中volumes,Mounts, Hostconfig.Binds参数需要按照自己的映射关系去填写。
这样和通过:
docker-compose 配置文件启动
或者docker -v 参数命令行启动
达到一样效果。
补充:docker文件夹映射的两种方式---主机卷映射和共享文件夹映射
docker容器不保持任何数据
重要数据请使用外部卷存储(数据持久化)
容器可以挂载真实机目录或共享存储为卷
[root@docker1 ~]# mkdir /var/data[root@docker1 ~]# docker run -it -v /var/data:/abc myos[root@f1fb58b85671 /]# cd /abc/[root@f1fb58b85671 abc]# touch f1[root@f1fb58b85671 abc]# lsf1 zhy[root@docker1 ~]# cd /var/data/[root@docker1 data]# lsf1[root@docker1 data]# touch zhy
思路:
将一台主机做为nfs主机, 创建相应的文件夹,并将其共享给docker的两台主机,两台docker主机将分享的文件夹映射到容器中,使得对应的容器可以共享到nfs主机的内容。可以将Http等服务器的相应的页面文件夹使用这种形式,从而实现多个容器跑一个业务。
[root@nfs ~]# yum -y install nfs-utils[root@nfs ~]# vim /etc/exports/public *(rw)[root@nfs ~]# systemctl restart nfs-serverFailed to restart nfs-serve.service: Unit not found[root@nfs ~]# mkdir /public[root@nfs ~]# cd /public/[root@nfs public]# touch nfs.txt[root@nfs public]# lsnfs.txt
[root@docker1 ~]# vim /etc/fstab 192.168.6.77:/public /mnt/nfs nfs defaults,_netdev 0 0[root@docker1 ~]# mkdir /mnt/nfs [root@docker1 ~]# systemctl restart nfs-server[root@docker1 ~]# mount -a[root@docker1 ~]# df -h192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs[root@docker1 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos[root@c7c376e3755a /]# cd /zhuhaiyan [root@c7c376e3755a zhuhaiyan]# lsnfs.txt
[root@docker2 ~]# vim /etc/fstab 192.168.6.77:/public /mnt/nfs nfs defaults,_netdev 0 0[root@docker2 ~]# mkdir /mnt/nfs [root@docker2 ~]# systemctl restart nfs-server[root@docker2 ~]# mount -a[root@docker2 ~]# df -h192.168.6.77:/public 17G 3.2G 14G 19% /mnt/nfs[root@docker2 ~]# docker run -it -v /mnt/nfs/:/zhuhaiyan 192.168.6.153:5000/myos[root@cdd805771d07 /]# cd /zhuhaiyan/[root@cdd805771d07 zhuhaiyan]# lsnfs.txt
以上是“docker中volumes文件如何实现映射”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!
--结束END--
本文标题: docker中volumes文件如何实现映射
本文链接: https://lsjlt.com/news/268534.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0