This scenario will explain how to launch an NGINX Docker container via Terraform. The scenario will explain how to update the configuration and view the changes which will be applied.
Terraform is used to create, manage, and manipulate infrastructure resources. Examples of resources include physical machines, VMs, network switches, containers, etc. Almost any infrastructure noun can be represented as a resource in Terraform.
This scenario has explained how to use Terraform to manage your desired Docker state. Firstly you define a configuration defining providers and resources. We plan the actions required and then apply them to our infrastructure.
To learn more visit https://www.terraform.io/docs/commands/index.html and https://www.terraform.io/docs/providers/docker/index.html

Steps
Deploy NGINX container using Terraform
Create Terraform Config
Terraform works based on a configuration file, in this case config.tf. The configuration defines your infrastructure, in this instance as providers and resources.
A provider is an abstract way of handling the underlying infrastructure and responsible for managing the lifecycle of a resource.
A resource are components of your infrastructure, for example a container or image.
The editor allows us to write the config.tf file. The first section defines a docker host where we want to apply our configuration too.
provider "docker" { host = "tcp://docker:2345/" }
We can now start defining the resources of our infrastructure. The first resource is our Docker image. A resource has two parameters, one is a TYPE and second a NAME. The type is docker_image and the name is nginx. Within the block we define the name and tag of the Docker Image.
resource "docker_image" "nginx" { name = "nginx:1.11-alpine" }
We can define our container resource. The resource type is docker_container and name as nginx-server. Within the block we set the resource parameters. We can reference other resources, such as a the image.
resource "docker_container" "nginx-server" { name = "nginx-server" image = "${docker_image.nginx.latest}" ports { internal = 80 } volumes { container_path = "/usr/share/nginx/html" host_path = "/home/scrapbook/tutorial/www" read_only = true } }
You’ll love Katacoda

Guided Path
Knowing what you need to know is the hardest part. Our guided pathways help build your knowledge around real-world scenarios.

Learn By Doing
The best way to learn is by doing. All our tutorials are interactive with pre-configured live environments ready for you to use.

Stay up-to-date
It's a competitive industry. Your skills need to keep up with the latest approaches. Katacoda keeps your skills up-to-date.
You’ll love Katacoda

Guided Path
Knowing what you need to know is the hardest part. Our guided pathways help build your knowledge around real-world scenarios.

Learn By Doing
The best way to learn is by doing. All our tutorials are interactive with pre-configured live environments ready for you to use.

Stay up-to-date
It's a competitive industry. Your skills need to keep up with the latest approaches. Katacoda keeps your skills up-to-date.