2020-12-24 10:27:42 -05:00
|
|
|
# Terraform Provider
|
2017-06-05 16:59:08 -04:00
|
|
|
|
|
|
|
|
- Website: https://www.terraform.io
|
2020-12-25 04:20:14 -05:00
|
|
|
- Provider: [kreuzwerker/docker](https://registry.terraform.io/providers/kreuzwerker/docker/latest)
|
|
|
|
|
- Slack: [@gophers/terraform-provider-docker](https://gophers.slack.com/archives/C01G9TN5V36)
|
2017-06-05 16:59:08 -04:00
|
|
|
|
|
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
## Requirements
|
2020-12-27 05:18:22 -05:00
|
|
|
- [Terraform](https://www.terraform.io/downloads.html) >=0.12.x
|
2020-10-13 05:23:18 -04:00
|
|
|
- [Go](https://golang.org/doc/install) 1.15.x (to build the provider plugin)
|
2017-06-05 16:59:08 -04:00
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
## Building The Provider
|
2017-06-05 16:59:08 -04:00
|
|
|
|
|
|
|
|
```sh
|
2021-02-26 13:21:14 -05:00
|
|
|
$ git clone git@github.com:kreuzwerker/terraform-provider-docker
|
2017-11-21 04:14:07 -05:00
|
|
|
$ make build
|
2017-06-05 16:59:08 -04:00
|
|
|
```
|
2017-11-21 04:14:07 -05:00
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
## Example usage
|
2017-11-21 04:14:07 -05:00
|
|
|
```hcl
|
2020-12-24 10:27:42 -05:00
|
|
|
# Set the required provider and versions
|
|
|
|
|
terraform {
|
|
|
|
|
required_providers {
|
2020-12-26 08:44:09 -05:00
|
|
|
# We recommend pinning to the specific version of the Docker Provider you're using
|
2020-12-24 10:27:42 -05:00
|
|
|
# since new versions are released frequently
|
|
|
|
|
docker = {
|
|
|
|
|
source = "kreuzwerker/docker"
|
2021-06-22 11:32:10 -04:00
|
|
|
version = "2.13.0"
|
2020-12-24 10:27:42 -05:00
|
|
|
}
|
|
|
|
|
}
|
2017-11-21 04:14:07 -05:00
|
|
|
}
|
|
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
# Configure the docker provider
|
|
|
|
|
provider "docker" {
|
|
|
|
|
}
|
2018-09-28 10:18:48 -04:00
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
# Create a docker image resource
|
|
|
|
|
# -> docker pull nginx:latest
|
2021-03-25 06:50:57 -04:00
|
|
|
resource "docker_image" "nginx" {
|
|
|
|
|
name = "nginx:latest"
|
2020-12-24 10:27:42 -05:00
|
|
|
keep_locally = true
|
|
|
|
|
}
|
2018-09-28 10:18:48 -04:00
|
|
|
|
2020-12-24 10:27:42 -05:00
|
|
|
# Create a docker container resource
|
2021-06-21 03:24:02 -04:00
|
|
|
# -> same as 'docker run --name nginx -p8080:80 -d nginx:latest'
|
2021-03-25 06:50:57 -04:00
|
|
|
resource "docker_container" "nginx" {
|
|
|
|
|
name = "nginx"
|
|
|
|
|
image = docker_image.nginx.latest
|
2021-06-21 03:24:02 -04:00
|
|
|
|
|
|
|
|
ports {
|
|
|
|
|
external = 8080
|
|
|
|
|
internal = 80
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# Or create a service resource
|
|
|
|
|
# -> same as 'docker service create -d -p 8081:80 --name nginx-service --replicas 2 nginx:latest'
|
|
|
|
|
resource "docker_service" "nginx_service" {
|
|
|
|
|
name = "nginx-service"
|
|
|
|
|
task_spec {
|
|
|
|
|
container_spec {
|
|
|
|
|
image = docker_image.nginx.repo_digest
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
mode {
|
|
|
|
|
replicated {
|
|
|
|
|
replicas = 2
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
endpoint_spec {
|
|
|
|
|
ports {
|
|
|
|
|
published_port = 8081
|
|
|
|
|
target_port = 80
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-12-24 10:27:42 -05:00
|
|
|
}
|
2021-02-26 13:21:14 -05:00
|
|
|
```
|