SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
Docker Compose and
Panamax
Jonas Rosland
Developer Advocate
@jonasrosland
jonas.rosland@emc.com
emccode.github.io
June 2015
emccode.github.io
Raffle!
Follow and tweet
@emccode
github.com/emccode/training
Different types of management
Developer-focused:
- Docker Compose
- Panamax
Ops-focused:
- Kubernetes
- Mesos
- Tectonic
- Fleet
- Docker Swarm
First a bit of history
Fig
Fig
Fast, isolated development environments using Docker.
Orchard acquired by Docker July 2014
Docker's first acquisition
Docker Compose
(Fig 2.0)
First, let's verify your installs
1. boot2docker/docker
2. Docker Compose
boot2docker
$ boot2docker init
$ boot2docker up
Waiting for VM and Docker daemon to start...
.............................ooooooooooooooooooooooooooooooooooooooo
Started.
Docker
$ docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.4.2
Git commit (client): 7c8fca2
OS/Arch (client): darwin/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.4.2
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64
Docker Compose
$ docker-compose ps
Name Command State Ports
------------------------------
Optional: Clean up your Docker
environment
docker rm `docker images -q`
docker rmi `docker images -q`
Docker Compose example (1/3)
Let's define two services:
web
- built from Dockerfile
- runs the command python app.py inside the image
- forwards the exposed port 5000 on the container to port
5000 on the host machine
- connects to the Redis service
- mounts the current directory inside the container
redis, which uses the public image redis
Docker Compose example (2/3)
Dockerfile:
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
Docker Compose example (3/3)
docker-compose.yml:
web:
build: .
command: python app.py
ports:
- "5000:5000"
volumes:
- .:/code
links:
- redis
redis:
image: redis
So what are we defining?
build - the dir we are building from
command - the command we run inside the container
ports - the ports we open and map to the host
volumes - directory we map as a volume and where we mount
it
links - what service we link to (create /etc/hosts lines)
Run it!
$ docker-compose up
Creating lab3dockercomposeandpanamax_redis_1...
Pulling image redis:latest...
latest: Pulling from redis
<snip>
Creating lab3dockercomposeandpanamax_web_1...
Building web...
Step 0 : FROM python:2.7
2.7: Pulling from python
<snip>
redis_1 | 1:M 05 Jun 16:20:55.105 * DB loaded from disk: 0.000 seconds
redis_1 | 1:M 05 Jun 16:20:55.105 * The server is now ready to accept connections on port 6379
web_1 | * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
web_1 | * Restarting with stat
Verify that it's running
$ docker-compose ps
Name Command State Ports
--------------------------------------------------------------------------------------------------
lab3dockercomposeandpanamax_redis_1 /entrypoint.sh redis-server Up 6379/tcp
lab3dockercomposeandpanamax_web_1 python app.py Up 0.0.0.0:5000->5000/tcp
Wanna verify more
stuff?
docker ps
$ docker ps
CONTAINER ID IMAGE
9f4fe02e2696 lab3dockercomposeandpanamax_web:latest
d01f11317166 redis:latest
docker exec
$ docker exec -ti 9f4fe02e2696 /bin/bash
root@9f4fe02e2696:/code# ls
Dockerfile app.py docker-compose.yml requirements.txt test
docker exec
root@9f4fe02e2696:/code# cat /etc/hosts
172.17.0.7 9f4fe02e2696
127.0.0.1 localhost
<snip>
172.17.0.5 lab3dockercomposeandpanamax_redis_1 d01f11317166
172.17.0.5 redis d01f11317166 lab3dockercomposeandpanamax_redis_1
172.17.0.5 redis_1 d01f11317166 lab3dockercomposeandpanamax_redis_1
Sooooo, how do we connect to it?
$ boot2docker ip
192.168.59.103
Refresh!
So what have you done?
Built a container from scratch
Run a web app using Flask in the container
Connect it to Redis
Store data in Redis
Retrieve the data and present it
Pretty cool!
What happens if you
stop and start it?
Was there anything unneccesary
in the Dockerfile or docker-
compose.yml?
Some more info on
Docker Compose
External links
Link to containers outside Docker Compose using
CONTAINER:ALIAS
external_links:
- redis_1
- project_db_1:mysql
- project_db_1:postgresql
Ports
Using the HOST:CONTAINER format, don't use ports lower
than 60, because YAML will parse numbers in the format xx:yy
as sexagesimal (base 60). For this reason, we recommend
always adding port mappings as strings.
ports:
- "3000"
- "8000:8000"
- "49100:22"
- "127.0.0.1:8001:8001"
What about scaling?
Let's change our docker-
compose.yml
web:
build: .
command: python app.py
ports:
- "5000"
links:
- redis
redis:
image: redis
Re-run docker-compose up
$ docker-compose up
<snip>
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------
lab3dockercomposeandpanamax_redis_1 /entrypoint.sh redis-server Up 6379/tcp
lab3dockercomposeandpanamax_web_1 python app.py Up 0.0.0.0:32770->5000/tcp
See the port number?
Scale it!
$ docker-compose scale web=3
Creating lab3dockercomposeandpanamax_web_2...
Creating lab3dockercomposeandpanamax_web_3...
Starting lab3dockercomposeandpanamax_web_2...
Starting lab3dockercomposeandpanamax_web_3...
Check the ports
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------------
lab3dockercomposeandpanamax_redis_1 /entrypoint.sh redis-server Up 6379/tcp
lab3dockercomposeandpanamax_web_1 python app.py Up 0.0.0.0:32770->5000/tcp
lab3dockercomposeandpanamax_web_2 python app.py Up 0.0.0.0:32771->5000/tcp
lab3dockercomposeandpanamax_web_3 python app.py Up 0.0.0.0:32772->5000/tcp
So what have you done?
Scaled a web app
Connected all web instances to a shared Redis DB
Stored persistent data in Redis
Presented that persistent data using all web instances
You are awesome :)
One more thing...
Docker Compose
Extends!
Extends
Enables sharing of common configs
Lets you reuse commonly-defined services
So how do we do
this?
Lets take our example
app again
app.py
from flask import Flask
from redis import Redis
import os
app = Flask(__name__)
redis = Redis(host=os.environ['REDIS_HOST'], port=6379)
@app.route('/')
def hello():
redis.incr('hits')
return 'Hello World! I have been seen %s times.n' % redis.get('hits')
if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
Dockerfile
FROM python:2.7
ADD . /code
WORKDIR /code
RUN pip install -r requirements.txt
CMD python app.py
common.yml
web:
build: .
ports:
- "5000:5000"
docker-compose.yml
web:
extends:
file: common.yml
service: web
volumes:
- .:/code
links:
- redis
environment:
- REDIS_HOST=redis
redis:
image: redis
docker-compose up
Try changing app.py to see what
happens :)
production.yml
web:
extends:
file: common.yml
service: web
environment:
- REDIS_HOST=redis-production.example.com
docker-compose -f production.yml up
Alright, time for
Panamax
Panamax
An open-source project that makes deploying complex
containerized apps as easy as Drag-and-Drop
Created by CenturyLink Labs
Released in August 2014
Search for images
Run images in "apps"
Manage and add more images to an app
Expose ports
Link containers together
Verify you've got Panamax
installed
$ panamax init
Port forwarding your Panamax
instance
VBoxManage controlvm panamax-vm natpf1 rule1,tcp,,8080,,80
Demotime!!
Hope you all enjoyed
this workshop :)
Contact
Jonas Rosland
Developer Advocate
@jonasrosland
jonas.rosland@emc.com
emccode.github.io
Fin

Mais conteúdo relacionado

Mais procurados

Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
Jim Yeh
 
Continuous integration with Docker and Ansible
Continuous integration with Docker and AnsibleContinuous integration with Docker and Ansible
Continuous integration with Docker and Ansible
Dmytro Slupytskyi
 

Mais procurados (20)

Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]
Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]
Docker 1.12 & Swarm Mode [Montreal Docker Meetup Sept. 2016]
 
Introduction to docker and docker compose
Introduction to docker and docker composeIntroduction to docker and docker compose
Introduction to docker and docker compose
 
Docker orchestration using core os and ansible - Ansible IL 2015
Docker orchestration using core os and ansible - Ansible IL 2015Docker orchestration using core os and ansible - Ansible IL 2015
Docker orchestration using core os and ansible - Ansible IL 2015
 
Docker Workshop
Docker WorkshopDocker Workshop
Docker Workshop
 
Docker with openstack
Docker with openstackDocker with openstack
Docker with openstack
 
Docker 1.13 - Docker meetup février 2017
Docker 1.13 - Docker meetup février 2017Docker 1.13 - Docker meetup février 2017
Docker 1.13 - Docker meetup février 2017
 
Docker n co
Docker n coDocker n co
Docker n co
 
Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2Academy PRO: Docker. Part 2
Academy PRO: Docker. Part 2
 
Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014Dockerize your Symfony application - Symfony Live NYC 2014
Dockerize your Symfony application - Symfony Live NYC 2014
 
Infrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & AnsibleInfrastructure Deployment with Docker & Ansible
Infrastructure Deployment with Docker & Ansible
 
ABCing docker with environments - workshop
ABCing docker with environments - workshopABCing docker with environments - workshop
ABCing docker with environments - workshop
 
Introduction to Docker
Introduction to DockerIntroduction to Docker
Introduction to Docker
 
Docker for mere mortals
Docker for mere mortalsDocker for mere mortals
Docker for mere mortals
 
Introduction to docker
Introduction to dockerIntroduction to docker
Introduction to docker
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Continuous integration with Docker and Ansible
Continuous integration with Docker and AnsibleContinuous integration with Docker and Ansible
Continuous integration with Docker and Ansible
 
What’s new in Docker 1.13
What’s new in Docker 1.13What’s new in Docker 1.13
What’s new in Docker 1.13
 
Build service with_docker_in_90mins
Build service with_docker_in_90minsBuild service with_docker_in_90mins
Build service with_docker_in_90mins
 
Talk about Docker
Talk about DockerTalk about Docker
Talk about Docker
 
Docker slides
Docker slidesDocker slides
Docker slides
 

Semelhante a Docker Compose and Panamax - ContainerDays Boston - June 2015

Semelhante a Docker Compose and Panamax - ContainerDays Boston - June 2015 (20)

Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)Running Docker in Development & Production (DevSum 2015)
Running Docker in Development & Production (DevSum 2015)
 
Docker container management
Docker container managementDocker container management
Docker container management
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
What’s New in Docker - Victor Vieux, Docker
What’s New in Docker - Victor Vieux, DockerWhat’s New in Docker - Victor Vieux, Docker
What’s New in Docker - Victor Vieux, Docker
 
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz LachJDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
JDO 2019: Tips and Tricks from Docker Captain - Łukasz Lach
 
Real World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and ProductionReal World Experience of Running Docker in Development and Production
Real World Experience of Running Docker in Development and Production
 
Docker, the Future of DevOps
Docker, the Future of DevOpsDocker, the Future of DevOps
Docker, the Future of DevOps
 
Docker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak PeekDocker for Web Developers: A Sneak Peek
Docker for Web Developers: A Sneak Peek
 
Docker^3
Docker^3Docker^3
Docker^3
 
Running .NET on Docker
Running .NET on DockerRunning .NET on Docker
Running .NET on Docker
 
Docker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google CloudDocker, Kubernetes, and Google Cloud
Docker, Kubernetes, and Google Cloud
 
Docker in Action
Docker in ActionDocker in Action
Docker in Action
 
Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)Running Docker in Development & Production (#ndcoslo 2015)
Running Docker in Development & Production (#ndcoslo 2015)
 
The How and Why of Windows containers
The How and Why of Windows containersThe How and Why of Windows containers
The How and Why of Windows containers
 
Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3Academy PRO: Docker. Lecture 3
Academy PRO: Docker. Lecture 3
 
Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016Deploying Windows Containers on Windows Server 2016
Deploying Windows Containers on Windows Server 2016
 
廣宣學堂: 容器進階實務 - Docker進深研究班
廣宣學堂: 容器進階實務 - Docker進深研究班廣宣學堂: 容器進階實務 - Docker進深研究班
廣宣學堂: 容器進階實務 - Docker進深研究班
 
Docker 進階實務班
Docker 進階實務班Docker 進階實務班
Docker 進階實務班
 
Containerizing Web Application with Docker
Containerizing Web Application with DockerContainerizing Web Application with Docker
Containerizing Web Application with Docker
 
Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 

Mais de Jonas Rosland

Docker and containers - For Boston Docker Meetup Workshop in March 2015
Docker and containers - For Boston Docker Meetup Workshop in March 2015Docker and containers - For Boston Docker Meetup Workshop in March 2015
Docker and containers - For Boston Docker Meetup Workshop in March 2015
Jonas Rosland
 
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
Jonas Rosland
 
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
Jonas Rosland
 

Mais de Jonas Rosland (18)

Running stateful services in containers - ContainerDays Boston 2016
Running stateful services in containers - ContainerDays Boston 2016Running stateful services in containers - ContainerDays Boston 2016
Running stateful services in containers - ContainerDays Boston 2016
 
Open Source, infrastructure as Code, Cloud Native Apps 2015
Open Source, infrastructure as Code, Cloud Native Apps 2015Open Source, infrastructure as Code, Cloud Native Apps 2015
Open Source, infrastructure as Code, Cloud Native Apps 2015
 
Docker and Containers overview - Docker Workshop
Docker and Containers overview - Docker WorkshopDocker and Containers overview - Docker Workshop
Docker and Containers overview - Docker Workshop
 
VMworld 2015 San Francisco - INF5432 - Infrastructure as Code - Ban Snowflake...
VMworld 2015 San Francisco - INF5432 - Infrastructure as Code - Ban Snowflake...VMworld 2015 San Francisco - INF5432 - Infrastructure as Code - Ban Snowflake...
VMworld 2015 San Francisco - INF5432 - Infrastructure as Code - Ban Snowflake...
 
VMworld 2015 San Francisco - CNA5520 - Run your Stateful and Stateless Apps i...
VMworld 2015 San Francisco - CNA5520 - Run your Stateful and Stateless Apps i...VMworld 2015 San Francisco - CNA5520 - Run your Stateful and Stateless Apps i...
VMworld 2015 San Francisco - CNA5520 - Run your Stateful and Stateless Apps i...
 
DevOps at EMC NYC August 2015 - Modernize your apps to drive organizational e...
DevOps at EMC NYC August 2015 - Modernize your apps to drive organizational e...DevOps at EMC NYC August 2015 - Modernize your apps to drive organizational e...
DevOps at EMC NYC August 2015 - Modernize your apps to drive organizational e...
 
Scale out data persistence for all your stateful container needs - Docker Mee...
Scale out data persistence for all your stateful container needs - Docker Mee...Scale out data persistence for all your stateful container needs - Docker Mee...
Scale out data persistence for all your stateful container needs - Docker Mee...
 
CIO Connect 2015 - Modernize your applications to drive organizational effici...
CIO Connect 2015 - Modernize your applications to drive organizational effici...CIO Connect 2015 - Modernize your applications to drive organizational effici...
CIO Connect 2015 - Modernize your applications to drive organizational effici...
 
Open Source and EMC {code} Overview - June 2015
Open Source and EMC {code} Overview - June 2015Open Source and EMC {code} Overview - June 2015
Open Source and EMC {code} Overview - June 2015
 
CoreOS 101 - EMC World 2015
CoreOS 101 - EMC World 2015CoreOS 101 - EMC World 2015
CoreOS 101 - EMC World 2015
 
Docker 101 - DevOps at EMC May 2015
Docker 101 - DevOps at EMC May 2015Docker 101 - DevOps at EMC May 2015
Docker 101 - DevOps at EMC May 2015
 
EMC World 2015 - The Devops Toolkit
EMC World 2015 - The Devops ToolkitEMC World 2015 - The Devops Toolkit
EMC World 2015 - The Devops Toolkit
 
2015 03-19-devops-toolkit-varrow-madness
2015 03-19-devops-toolkit-varrow-madness2015 03-19-devops-toolkit-varrow-madness
2015 03-19-devops-toolkit-varrow-madness
 
Docker and containers - For Boston Docker Meetup Workshop in March 2015
Docker and containers - For Boston Docker Meetup Workshop in March 2015Docker and containers - For Boston Docker Meetup Workshop in March 2015
Docker and containers - For Boston Docker Meetup Workshop in March 2015
 
vBrownbag 2013 June 4th - Puppet and Razor - Jonas Rosland
vBrownbag 2013 June 4th - Puppet and Razor - Jonas RoslandvBrownbag 2013 June 4th - Puppet and Razor - Jonas Rosland
vBrownbag 2013 June 4th - Puppet and Razor - Jonas Rosland
 
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
PuppetCamp Amsterdam 2013 - Automated OS and App deployment using Puppet and ...
 
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
PuppetCamp London 2013 - Automated OS and App deployment using Puppet and Raz...
 
VMUG Sweden 2013-02-08 - Puppet and Razor
VMUG Sweden 2013-02-08 - Puppet and RazorVMUG Sweden 2013-02-08 - Puppet and Razor
VMUG Sweden 2013-02-08 - Puppet and Razor
 

Último

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 

Último (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 

Docker Compose and Panamax - ContainerDays Boston - June 2015