SlideShare a Scribd company logo
Docker-compose
(AKA Keeping-it-all-together)
Meet Rory
• Developer in R&D team at BBD
– Training for 700 Developers
– Most Languages & Frameworks
• Organizer for the Java and AWS User groups
• Not related to Tyrion Lannister
• Don’t do kids parties
@rorypreddy
Dockercompose
Dockercompose
State Of the Docker Nation
•Docker CE and EE
•Compose 3
•EKS and AKS
•Docker 18
What we are going to build
Dockercompose
Spring Boot: Docker image
• Install Java
• Install application JAR file
• Configure image to run Java on start-up
• Handle externalized configuration
Spring Boot: Docker image
Spring Boot : Reactive Rest
Spring Boot: Reactive Mongo
Dockercompose
Angular: Docker image
• Configure to Run alpine + Apache
• Add dist folder
• Expose port 80
Angular: Docker image
Angular
quotes: Quote[] = new Array();
url: string = 'http://localhost:8080/quotes-reactive';
getQuoteStream(page?: number, size?: number): Observable<Array<Quote>> {
this.quotes = new Array();
return Observable.create((observer) => {
let url = this.url;
let eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
console.debug('Received event: ', event);
let json = JSON.parse(event.data);
this.quotes.push(new Quote(json['id'], json['book'], json['content']));
observer.next(this.quotes);
};
eventSource.onerror = (error) => observer.error('EventSource error: ' + error);
});
}
Dockercompose
Angular
quotes: Quote[] = new Array();
url: string = 'http://localhost:8080/quotes-reactive';
getQuoteStream(page?: number, size?: number): Observable<Array<Quote>> {
this.quotes = new Array();
return Observable.create((observer) => {
let url = this.url;
let eventSource = new EventSource(url);
eventSource.onmessage = (event) => {
console.debug('Received event: ', event);
let json = JSON.parse(event.data);
this.quotes.push(new Quote(json['id'], json['book'],
json['content']));
observer.next(this.quotes);
};
eventSource.onerror = (error) => observer.error('EventSource error: ' + error);
});
Dockercompose
What is Docker Compose?
• Define and run multi-container applications
• Specify images and configuration in a simple
YAML file:
docker-compose.yml
• One command to get it all running:
$ docker-compose up
What is Docker Compose?
docker-compose up:
• Builds images from Dockerfiles
• Pulls images from registries
• Creates and starts containers
• Streams their logs
Dockercompose
What is Docker Compose?
Make your development environments:
• Repeatable
• Isolated
• Fast
Automated testing environments:
$ docker-compose up -d
$ ./run_tests
$ docker-compose down
What is Docker Compose?
version: "2"
services:
mongo:
spring-boot-reactive:
angular-reactive:
volumes:
mongodata:
networks:
network-reactive:
Let create a Compose file
services:
mongo:
image: mongo:3.4
hostname: mongo
ports:
- "27017:27017"
volumes:
- mongodata:/data/db
networks:
- network-reactive
spring-boot-reactive:
angular-reactive:
volumes:
mongodata:
networks:
network-reactive:
Let create a Compose file - Mongo
services:
mongo:
spring-boot-reactive:
build:
context: ../spring-boot-reactive-web
image: spring-boot-reactive-web-tpd
environment:
- SPRING_DATA_MONGODB_HOST=mongo
ports:
- "8080:8080"
networks:
- network-reactive
angular-reactive:
volumes:
mongodata:
networks:
network-reactive:
Let create a Compose file – Spring Boot
services:
mongo:
spring-boot-reactive:
angular-reactive:
build:
context: ../angular-reactive
image: angular-reactive-tpd
ports:
- "8900:80"
networks:
- network-reactive
volumes:
mongodata:
networks:
network-reactive:
Let create a Compose file - Angular
Dockercompose
Dockercompose
Dockercompose
Version 3
DOCKER_ORCHESTRATOR=swarm
Or
DOCKER_ORCHESTRATOR=kubernetes
export DOCKER_ORCHESTRATOR=kubernetes
docker stack deploy wordsmith -c docker-compose.yml
kubectl get deployment
docker stack rm wordsmith
Finally
• Reactive Project - https://github.com/roryp/full-reactive-stack
• Swarm & K8 - https://github.com/dockersamples/k8s-wordsmith-demo

More Related Content

Dockercompose