本文整理匯總了Golang中github.com/samalba/dockerclient.ContainerConfig.HostConfig方法的典型用法代碼示例。如果您正苦於以下問題:Golang ContainerConfig.HostConfig方法的具體用法?Golang ContainerConfig.HostConfig怎麽用?Golang ContainerConfig.HostConfig使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/samalba/dockerclient.ContainerConfig
的用法示例。
在下文中一共展示了ContainerConfig.HostConfig方法的1個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: CreateService
func CreateService(config *ServiceConfig) ([]string, error) {
swarm, err := swarmclient.NewSwarmClient()
if err != nil {
log.Fatalf("service.CreateService():%s\n", err)
return nil, err
}
containerIds := make([]string, 0)
containerConfig := new(dockerclient.ContainerConfig)
containerConfig.Image = config.Spec.Image
containerConfig.Labels = config.Metadata.Labels
portBindings := make(map[string][]dockerclient.PortBinding)
containerConfig.Env = config.Spec.Selector
containerConfig.Cmd = config.Spec.Cmd
//exposed ports , so that others can't use
if len(config.Spec.Ports) > 0 {
ports := make(map[string]struct{})
for index := range config.Spec.Ports {
port := strconv.Itoa(config.Spec.Ports[index])
ports[port] = struct{}{}
}
containerConfig.ExposedPorts = ports
}
// intit hostconfig. use host, create and start containers
hostConfig := &dockerclient.HostConfig{}
if config.Spec.Resources.NetworkMode != "" {
hostConfig.NetworkMode = config.Spec.Resources.NetworkMode
} else {
hostConfig.NetworkMode = "host"
}
// use to filter Resources
hostConfig.CpuShares = config.Spec.Resources.CpuShares
hostConfig.CpusetCpus = config.Spec.Resources.CpusetCpus
hostConfig.Memory = config.Spec.Resources.Memory
hostConfig.MemorySwap = config.Spec.Resources.MemorySwap
cpuQuota, err := strconv.Atoi(config.Spec.Resources.CpuQuota)
if err != nil {
hostConfig.CpuQuota = 0
} else {
hostConfig.CpuQuota = int64(cpuQuota)
}
// replicas
numOfTimes := 0
if config.Spec.Replicas > 0 {
numOfTimes = config.Spec.Replicas
} else if config.Spec.Replicas == 0 {
numOfTimes = len(config.Spec.Ips)
//****
if len(config.Spec.Ports) == 0 {
err := fmt.Errorf("service.CreateService():%+s Give ips but not give ports\n", config.Metadata.Name)
log.Error(err)
return nil, err
}
}
for i := 0; i < numOfTimes; i++ {
// use to filter specific ips and ports
for _, port := range config.Spec.Ports {
portbinding := &dockerclient.PortBinding{HostPort: strconv.Itoa(port)}
if len(config.Spec.Ips) > 0 {
portbinding.HostIp = config.Spec.Ips[i]
}
portBindings[strconv.Itoa(port)] = []dockerclient.PortBinding{*portbinding}
}
hostConfig.PortBindings = portBindings
// hostconfig
containerConfig.HostConfig = *hostConfig
// give container different name
containerName := config.Metadata.Name
if role := config.Metadata.Labels["role"]; role != "" {
containerName += "_" + role
}
containerName += strconv.Itoa(i)
log.Debugf("service.CreateService():containerName:%s ; containerConfig:%+v\n", containerName, containerConfig)
//create container
containerId, err := swarm.CreateContainer(containerConfig, containerName)
log.Debugf("service.CreateService():containerId:%s\n", containerId)
if err != nil {
log.Fatalf("service.CreateService():%s\n", err)
fmt.Printf("[error]service.CreateService():%+v\n", err)
}
containerIds = append(containerIds, containerId)
if config.Metadata.Labels["type"] != "libvirt" {
//docker start container,libvirt do not need to start
swarm.StartContainer(containerId, hostConfig)
if err != nil {
log.Fatalf("service.CreateService():%s\n", err)
fmt.Printf("[error]service.CreateService():%+v\n", err)
return nil, err
}
}
}
//.........這裏部分代碼省略.........