Nginx (Web Server) - Install Update or Delete an Nginx Container on Docker using Terraform

This assumes you have installed Terraform, as described at and that you have also installed Docker on Linux and Docker is running.

Let's create a directory that will contain the file that will be used to create an Nginx container on Docker.

mkdir /usr/local/terraform/nginx/docker
cd /usr/local/terraform/nginx/docker


Create the file.



And the add the following to Let's break this down.

  • Provider kreuzwerker/docker will be used for Docker
  • The lastest version of image nginx will be pulled down
  • The nginx container will be created and started, listening on port 80 in the container and port 8000 on the Docker server
terraform {
  required_providers {
    docker = {
      source  = "kreuzwerker/docker"

provider "docker" {}

resource "docker_image" "nginx" {
  name         = "nginx:latest"
  keep_locally = false

resource "docker_container" "nginx" {
  image = docker_image.nginx.latest
  name  = "nginx"
  ports {
    internal = 80
    external = 8000


The terraform init command can be used so that Terraform can communicate with Docker.

terraform init


The terraform plan command can be used to see what Terraform will try to do.

terraform plan


By default, the terraform.tfstate file should be found in your root module directory (/usr/local/terraform/nginx/docker in this example).

  • If the Nginx container does not exist and the terraform.tfstate file does not contain the Nginx container, Terraform will create the Nginx container.
  • If the Nginx container exists and the terraform.tfstate file contains the Nginx container and a difference is found between the file and the terraform.tfstate file, Terraform will update the Nginx container.
  • If the Nginx container exists and the terraform.tfstate file contains the Nginx container and the Nginx container is removed from the file, Terraform will destroy (delete) the Nginx container.


The terraform apply command from your root module directory (/usr/local/terraform/nginx/docker in this example) can be used to create or update the image and Nginx container. 

terraform apply


The docker images command should include the Nginx image.

~]# docker images
nginx       latest  105b54dc64f1  32 hours ago  253 MB


The docker container command should show the nginx container is up and running.

CONTAINER ID   IMAGE     COMMAND                  CREATED        STATUS       PORTS                               NAMES
1a474bc0811b   nginx     "/docker-entrypoint.…"   2 minutes ago  Up 2 minutes>80/tcp, :::80->80/tcp   nginx


You should now be able to get the Nginx landing page at http://<hostname or IP address of your Docker server>:8000.

Did you find this article helpful?

If so, consider buying me a coffee over at Buy Me A Coffee

Add a Comment

We will never share your name or email with anyone. Enter your email if you would like to be notified when we respond to your comment.

Please enter 0a5f0 in the box below so that we can be sure you are a human.


Web design by yours truely - me, myself, and I   |   |