Terraform to provision Nginx Docker container

0 / 433
IAC terraform docker
Overview   In this post –  “Infrastructure as Code – Orchestration, Provisioning & Configuration Management (Ansible & Terraform) ” we learned what is Infrastructure as Code & what is terraform.    In this post – Install DevOps IaC tool “Terraform” on Centos 7 we learned how to install Terraform on Centos 7, having Linux OS.   In this article we will provision an Nginx container using docker on localhost Centos 7, having Linux OS.  
IAC terraform docker

IAC terraform docker

  Pre-requisites : 1. VM with Centos7 and docker installed.   Check if docker is installed and if not installed install it and restart it : [root@devops ~]# hostname devops.hostbread.com [root@devops ~]# yum -y install docker ; systemctl enable docker ; systemctl restart docker   Create main.tf in terraform-nginx-local directory   [root@devops ~]# hostname devops.hostbread.com [root@devops ~]# mkdir terraform-nginx-local [root@devops ~]# cd terraform-nginx-local [root@devops terraform-nginx-local]# pwd /root/terraform-nginx-local [root@devops terraform-nginx-local]# cat main.tf resource “docker_image” “nginx” { name = “docker.io/nginx” } resource “docker_container” “nginx” { image = “docker.io/nginx:latest” name = “nginx-tf” ports { internal = 80 external = 80 } } [root@devops terraform-nginx-local]#   Now we initialize the project using “terraform init”   [root@devops terraform-nginx-local]# terraform init   When initilization is completed you can see output as given below :  
Terraform init

Terraform init

  Next we provision the Nginx container using “terraform apply”. When prompted to confirm, type yes & press ENTER.   [root@devops terraform-nginx-local]# terraform apply   An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: + create   Terraform will perform the following actions:   # docker_container.nginx will be created + resource “docker_container” “nginx” { + attach = false + bridge = (known after apply) + command = (known after apply) + container_logs = (known after apply) + entrypoint = (known after apply) + env = (known after apply) + exit_code = (known after apply) + gateway = (known after apply) + hostname = (known after apply) + id = (known after apply) + image = (known after apply) + ip_address = (known after apply) + ip_prefix_length = (known after apply) + ipc_mode = (known after apply) + log_driver = “json-file” + logs = false + must_run = true + name = “tutorial” + network_data = (known after apply) + read_only = false + restart = “no” + rm = false + shm_size = (known after apply) + start = true + labels { + label = (known after apply) + value = (known after apply) } + ports { + external = 80 + internal = 80 + ip = “0.0.0.0” + protocol = “tcp” } } # docker_image.nginx will be created + resource “docker_image” “nginx” { + id = (known after apply) + latest = (known after apply) + name = “nginx:latest” } Plan: 2 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only ‘yes’ will be accepted to approve.   Enter a value: yes   Check that nginx docker container is running : [root@devops terraform-nginx-local]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES b3fda24188a8 docker.io/nginx:latest “nginx -g ‘daemon …” 2 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp nginx-tf   User curl to load nginx defualt website : [root@devops terraform-nginx-local]# curl http://localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p>   <p>For online documentation and support please refer to <a href=”http://nginx.org/”>nginx.org</a>.<br/> Commercial support is available at <a href=”http://nginx.com/”>nginx.com</a>.</p>   <p><em>Thank you for using nginx.</em></p> </body> </html> [root@devops terraform-nginx-local]#   we can also browse the IP of our localhost and check that defualt ngnix website is loading fine:  
terraform nginx

terraform nginx

  At last we can destroy nginx container using terraform destroy [root@devops terraform-nginx-local]# terraform destroy   When image is destroyed we can see message :   Destroy complete! Resources: 1 destroyed.     Subscribe and follow Golibrary on Facebook and Linkedin to get all the updates.    

Comments

comments


***Linux, Cloud & Devops Architect & Technical Content Writer*** I am a Linux Enthusiast and Supporter/Promoter of Open Source Technology with over 12+ years of experience in Linux, Cloud and Devops. I am A Technical Content writer for various sites like : Hostbread & Golibrary

Related Posts