docker volumes 文件映射方式
背景
在做區(qū)塊鏈日志模塊時(shí),如果容器運(yùn)行,需要把日志文件映射到宿主機(jī)上以方便查看。下面介紹一下我的實(shí)現(xiàn)方式。
實(shí)現(xiàn)
通過docker-compose配置文件volumes參數(shù)
配置文件示例:
volumes: - /var/run/:/host/var/run/ - ./channel-artifacts:/var/hyperledger/configs - ./fabric_logs:/tmp/fabric_logs/
把容器中/tmp/fabric_logs目錄映射到宿主機(jī)當(dāng)前目錄下的./fabric_logs目錄下。這兩個(gè)目錄會(huì)共享數(shù)據(jù)。
創(chuàng)建容器時(shí),代碼中配置相關(guān)參數(shù)
代碼中創(chuàng)建容器時(shí)添加:
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參數(shù)需要按照自己的映射關(guān)系去填寫。
這樣和通過:
1、docker-compose 配置文件啟動(dòng)
2、或者docker -v 參數(shù)命令行啟動(dòng)
達(dá)到一樣效果。
補(bǔ)充:docker文件夾映射的兩種方式---主機(jī)卷映射和共享文件夾映射
docker容器不保持任何數(shù)據(jù)
重要數(shù)據(jù)請使用外部卷存儲(chǔ)(數(shù)據(jù)持久化)
容器可以掛載真實(shí)機(jī)目錄或共享存儲(chǔ)為卷
主機(jī)卷的映射
[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]# ls f1 zhy [root@docker1 ~]# cd /var/data/ [root@docker1 data]# ls f1 [root@docker1 data]# touch zhy
使用共享存儲(chǔ)的映射
思路:
將一臺(tái)主機(jī)做為nfs主機(jī), 創(chuàng)建相應(yīng)的文件夾,并將其共享給docker的兩臺(tái)主機(jī),兩臺(tái)docker主機(jī)將分享的文件夾映射到容器中,使得對應(yīng)的容器可以共享到nfs主機(jī)的內(nèi)容??梢詫ttp等服務(wù)器的相應(yīng)的頁面文件夾使用這種形式,從而實(shí)現(xiàn)多個(gè)容器跑一個(gè)業(yè)務(wù)。
nfs主機(jī)配置【192.168.6.77】
[root@nfs ~]# yum -y install nfs-utils [root@nfs ~]# vim /etc/exports /public *(rw) [root@nfs ~]# systemctl restart nfs-server Failed 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]# ls nfs.txt
docker1主機(jī)配置
[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 -h 192.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]# ls nfs.txt
docker2主機(jī)配置
[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 -h 192.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]# ls nfs.txt
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持本站。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信