0% found this document useful (0 votes)
176 views

Docker Compose

The document describes using Docker Compose to define and run a Rails frontend and Sinatra backend application stack across two Docker containers. Docker Compose is used to define the images, ports, and links between the containers. Running "docker-compose up" brings up both containers and links them together, allowing the Rails app to communicate with the Sinatra backend. This provides an easy way to run the entire development stack with a single command.

Uploaded by

meh3re
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
176 views

Docker Compose

The document describes using Docker Compose to define and run a Rails frontend and Sinatra backend application stack across two Docker containers. Docker Compose is used to define the images, ports, and links between the containers. Running "docker-compose up" brings up both containers and links them together, allowing the Rails app to communicate with the Sinatra backend. This provides an easy way to run the entire development stack with a single command.

Uploaded by

meh3re
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

rails_frontend:

image: brikis98/rails-frontend
ports:
- "3000:3000"
links:
- sinatra_backend:sinatra_backend

sinatra_backend:
image: brikis98/sinatra-backend
ports:
- "4567:4567"

Define your entire dev stack as


code with docker-compose
rails_frontend:
image: brikis98/rails-frontend
ports:
- "3000:3000"
links:
- sinatra_backend

sinatra_backend:
image: brikis98/sinatra-backend
ports:
- "4567:4567"

Docker links provide a simple


service discovery mechanism
> docker-compose up
Starting infrastructureascodetalk_sinatra_backend_1
Recreating infrastructureascodetalk_rails_frontend_1

sinatra_backend_1 | INFO WEBrick 1.3.1


sinatra_backend_1 | INFO ruby 2.2.4 (2015-12-16)
sinatra_backend_1 | Sinatra has taken the stage on 4567

rails_frontend_1 | INFO WEBrick 1.3.1


rails_frontend_1 | INFO ruby 2.3.0 (2015-12-25)
rails_frontend_1 | INFO WEBrick::HTTPServer#start: port=3000

Run your entire dev stack with one


command
Advantages of Docker:

1. Easy to create & share images


2. Images run the same way in all
environments (dev, test, prod)
3. Easily run the entire stack in dev
4. Minimal overhead
5. Better resource utilization
Disadvantages of Docker:

1. Maturity. Ecosystem developing


very fast, but still a ways to go
2. Tricky to manage persistent data in
a container
3. Tricky to pass secrets to containers
Outline
1. Microservices
2. Docker
3. Terraform
4. ECS
5. Recap
Terraform is a tool for
provisioning infrastructure
Terraform supports many
providers (cloud agnostic)
And many resources for each
provider
You define infrastructure as code
in Terraform templates
provider "aws" {
region = "us-east-1"
}

resource "aws_instance" "example" {


ami = "ami-408c7f28"
instance_type = "t2.micro"
}

This template creates a single EC2


instance in AWS
> terraform plan
+ aws_instance.example
ami: "" => "ami-408c7f28"
instance_type: "" => "t2.micro"
key_name: "" => "<computed>"
private_ip: "" => "<computed>"
public_ip: "" => "<computed>"

Plan: 1 to add, 0 to change, 0 to destroy.

Use the plan command to see


what you’re about to deploy
> terraform apply
aws_instance.example: Creating...
ami: "" => "ami-408c7f28"
instance_type: "" => "t2.micro"
key_name: "" => "<computed>"
private_ip: "" => "<computed>"
public_ip: "" => "<computed>”
aws_instance.example: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Use the apply command to apply


the changes
Now our EC2 instance is running!
resource "aws_instance" "example" {
ami = "ami-408c7f28"
instance_type = "t2.micro"
tags {
Name = "terraform-example"
}
}

Let’s give the EC2 instance a tag


with a readable name
> terraform plan
~ aws_instance.example
tags.#: "0" => "1"
tags.Name: "" => "terraform-example"

Plan: 0 to add, 1 to change, 0 to destroy.

Use the plan command again to


verify your changes
> terraform apply
aws_instance.example: Refreshing state...
aws_instance.example: Modifying...
tags.#: "0" => "1"
tags.Name: "" => "terraform-example"
aws_instance.example: Modifications complete

Apply complete! Resources: 0 added, 1 changed, 0 destroyed.

Use the apply command again to


deploy those changes
Now our EC2 instance has a tag!

You might also like