This repository has been archived on 2023-05-06. You can view files and clone it, but cannot push or open issues or pull requests.
helix/internal/docker/container.go
Dan Anglin fda0d6a682
feat: add traefik in the new containers stack
This commit adds the new containers stack which
now builds the traefik docker image and creates
the traefik docker container.

Pulumi needed to be downgraded to version 3.2.1
because later versions panic when building
the docker image.
2021-07-10 12:41:15 +01:00

76 lines
2.1 KiB
Go

package docker
import (
"fmt"
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
// DockerContainerInput is the configuration
// used to create the Gitea docker container.
type DockerContainerInput struct {
Image pulumi.StringInput
Ipv4Address pulumi.StringInput
EnvVars pulumi.StringArray
Name pulumi.StringInput
Network pulumi.StringInput
Volumes []DockerVolumeMount
UniqueLabel string
}
// DockerVolumeMount is the configuration
// used for mounting a host directory
// to a directory inside a container.
type DockerVolumeMount struct {
HostPath pulumi.StringInput
MountPath pulumi.StringInput
}
func CreateDockerContainer(ctx *pulumi.Context, c DockerContainerInput) error {
// all containers will mount the host's timezone and localtime files
// to ensure the correct time is synced.
volumes := []docker.ContainerVolumeInput{
docker.ContainerVolumeArgs{
ContainerPath: pulumi.String("/etc/timezone"),
HostPath: pulumi.String("/etc/timezone"),
ReadOnly: pulumi.BoolPtr(true),
},
docker.ContainerVolumeArgs{
ContainerPath: pulumi.String("/etc/localtime"),
HostPath: pulumi.String("/etc/localtime"),
ReadOnly: pulumi.BoolPtr(true),
},
}
// optionally create additional container volumes.
for _, v := range c.Volumes {
vArg := docker.ContainerVolumeArgs{
ContainerPath: v.MountPath,
HostPath: v.HostPath,
}
volumes = append(volumes, vArg)
}
args := docker.ContainerArgs{
Envs: c.EnvVars,
Image: c.Image,
Hostname: c.Name,
Name: c.Name,
NetworksAdvanced: docker.ContainerNetworksAdvancedArray{
docker.ContainerNetworksAdvancedArgs{
Name: c.Network,
Ipv4Address: c.Ipv4Address,
},
},
Restart: pulumi.String("unless-stopped"),
Volumes: docker.ContainerVolumeArray(volumes),
}
_, err := docker.NewContainer(ctx, fmt.Sprintf("%s_container", c.UniqueLabel), &args)
if err != nil {
return fmt.Errorf("unable to create the Docker container for %s...\n%w", c.UniqueLabel, err)
}
return nil
}