76 lines
2 KiB
Go
76 lines
2 KiB
Go
|
package docker
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
|
||
|
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
|
||
|
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
|
||
|
)
|
||
|
|
||
|
// DockerContainerConfig is the configuration
|
||
|
// used to create the Gitea docker container.
|
||
|
type DockerContainerConfig struct {
|
||
|
Image pulumi.StringInput
|
||
|
Ipv4Address pulumi.StringInput
|
||
|
EnvVars pulumi.StringArray
|
||
|
Name pulumi.StringInput
|
||
|
Network pulumi.StringInput
|
||
|
Volumes []DockerVolumeConfig
|
||
|
}
|
||
|
|
||
|
// VolumeConfig is the configuration
|
||
|
// used for mounting a host directory
|
||
|
// to a directory inside a container.
|
||
|
type DockerVolumeConfig struct {
|
||
|
HostPath pulumi.StringInput
|
||
|
MountPath pulumi.StringInput
|
||
|
}
|
||
|
|
||
|
func CreateDockerContainer(ctx *pulumi.Context, c DockerContainerConfig) 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),
|
||
|
},
|
||
|
}
|
||
|
|
||
|
// create additional (optional) 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, "gitea_container", &args)
|
||
|
if err != nil {
|
||
|
return fmt.Errorf("unable to create the Gitea docker container, %w", err)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|