feat: docker package

This commit is contained in:
Dan Anglin 2021-06-26 01:26:06 +01:00
parent 5e2109cda3
commit a7e8a71dff
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 144 additions and 0 deletions

View file

@ -0,0 +1,75 @@
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
}

34
internal/docker/image.go Normal file
View file

@ -0,0 +1,34 @@
package docker
import (
"fmt"
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
// DockerImageConfig is the configuration
// used to create the local Gitea docker
// image.
type DockerImageConfig struct {
ImageName pulumi.StringInput
BuildContext pulumi.StringInput
Version pulumi.StringInput
}
// CreateDockerImage creates a local Docker image.
func CreateDockerImage(ctx *pulumi.Context, c DockerImageConfig) error {
args := docker.ImageArgs{
ImageName: c.ImageName,
SkipPush: pulumi.Bool(true),
Build: docker.DockerBuildArgs{
Context: c.BuildContext,
},
}
_, err := docker.NewImage(ctx, "gitea_image", &args)
if err != nil {
return fmt.Errorf("unable to create the Gitea docker image, %w", err)
}
return nil
}

View file

@ -0,0 +1,35 @@
package docker
import (
"fmt"
"github.com/pulumi/pulumi-docker/sdk/v3/go/docker"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
// DockerNetworkConfig is the configuration
// used for creating a Docker network.
type DockerNetworkConfig struct {
Name pulumi.StringInput
Subnet pulumi.StringInput
Driver pulumi.StringInput
}
// CreateNetwork creates the forge platform's Docker network.
func CreateNetwork(ctx *pulumi.Context, c DockerNetworkConfig, label string) error {
args := docker.NetworkArgs{
Name: c.Name,
IpamDriver: c.Driver,
IpamConfigs: docker.NetworkIpamConfigArray{
docker.NetworkIpamConfigArgs{
Subnet: c.Subnet,
},
},
}
_, err := docker.NewNetwork(ctx, label, &args)
if err != nil {
return fmt.Errorf("unable to create the docker network, %w", err)
}
return nil
}

View file