SlideShare une entreprise Scribd logo
1  sur  33
Télécharger pour lire hors ligne
Containerizing
ContentBox CMS
Gavin Pickin
●
About Me?
Who am I?
● Software Consultant for Ortus Solutions
● Work with ColdBox, CommandBox, ContentBox every day
● Working with Coldfusion for 20 years
● Working with Javascript just as long
● Love learning and sharing the lessons learned
● From New Zealand, live in Bakersfield, Ca
● Loving wife, lots of kids, and countless critters
http://www.gpickin.com and @gpickin on twitter
http://www.ortussolutions.com
Docker Images
● Ortus Solutions has built and supports a few docker images, the most
common and popular
○ ortussolutions/commandbox
https://hub.docker.com/r/ortussolutions/commandbox/
● Ortus Solutions has built one especially for ContentBox
○ Adds several bells and whistles to help get your ContentBox app ready to deploy to docker
○ ContentBox Image updated for Version 4.0 release.
CommandBox Docker Image
https://hub.docker.com/r/ortussolutions/commandbox/
● Gives you commandbox, ready to go.
● Run any CF Engine or WAR file
● Use CFConfig to configure your cfml engine
● Use environment values for overrides
● Put your files in the /app directory and start the server of your choice
Your app is yours, and how you set it up, config it, is all up to you.
ContentBox Docker Image
https://hub.docker.com/r/ortussolutions/contentbox/
ContentBox’s image is built upon CommandBox, so it’s everything plus:
● Datasource config
● Distributed caching for content, rss etc
● Environment Overrides for ContentBox settings
● Embedded H2 DB support
● And more
Use PORTAINER
https://portainer.io/
Awesome, Free Opensource
Kiwi Powered :)
Portainer
ContentBox Image - Express version
● The express version uses an in memory H2 database.
● Perfect for setting up for testing.
● If you start with the express=true and install=true you can install a fresh
contentbox site into the H2 database
docker run -p 8080:8080 
-e express=true 
-e install=true 
ortussolutions/contentbox
ContentBox Image - Persisting Data
Docker doesn’t care about your data / files.
If you want to keep it, persist it.
Here we mount 2 volumes into the H2 data folder and the media folder
docker run -p 8080:8080 
-e express=true 
-e install=true 
-v `pwd`/contentbox-db:/data/contentbox/db 
-v `pwd`/contentbox-media:/app/includes/shared/media 
ortussolutions/contentbox
ContentBox Image - Environment Variables
This image allows you to pass in a series of environment variables to default your
values when installing ContentBox
● Express
● Install
● HEALTHCHECK_URI
● FWREINIT_PW
● SESSION_STORAGE
● DISTRIBUTED_CACHE
● H2_DIR
● contentbox_default_*
● ORM_SECONDARY_CACHE
● ORM_DIALECT
● REMOVE_CBADMIN
● JVM_HEAPSIZE
ContentBox Image - Database Connections
● To programmatically configure the database on container start, environment
variables which represent your datasource configuration should be provided.
There are two patterns supported:
○ DB_DRIVER configuration - which may be used for Adobe Coldfusion servers
○ DB_CLASS configuration - which configures a datasource by JDBC driver and
connection string.
ContentBox Image - Database Connections
MYSQL Setup
docker run -p 8080:8080 
-e 'express=true' 
-e 'installer=true' 
-e 'cfconfig_adminPassword=myS3cur3P455' 
-e
"DB_CONNECTION_STRING=jdbc:mysql://mysqlhost:3306/contentbox_docker?useUnicode=true&characterEncoding=UT
F-8&useLegacyDatetimeCode=true" 
-e 'DB_CLASS=org.gjt.mm.mysql.Driver' 
-e 'DB_USER=contentbox_user' 
-e 'DB_PASSWORD=myS3cur3P455' 
-v `pwd`/contentbox-media:/app/includes/shared/media 
ortussolutions/contentbox
ContentBox Image - Database Connections
MSSQL Setup on Adobe
docker run -p 8080:8080 
-e 'CFENGINE=adobe@11' 
-e 'installer=true' 
-e 'cfconfig_adminPassword=myS3cur3P455' 
-e 'DB_DRIVER=MSSQLServer' 
-e 'DB_HOST=sqlserver_host' 
-e 'DB_PORT=1433' 
-e 'DB_NAME=contentbox_docker' 
-e 'DB_USER=sa' 
-e 'DB_PASSWORD=myS3cur3P455' 
-v `pwd`/contentbox-media:/app/includes/shared/media 
ortussolutions/contentbox
ContentBox Image - Distributed Cache
● By default, this image is configured to use the connected database as a caching
storage as well. This will allow you to distribute your stack with pseudo-caching
enabled.
● However, if you would like to have a real distributed cache like Redis or Couchbase
connected to your images, you will need to use the appropriate CacheBox providers
and your own custom CacheBox.cfc configuration file. For an example of using Redis,
check out our compose repository:
https://github.com/Ortus-Solutions/docker-contentbox-distributed
What if I have a ContentBox site already?
Two Options
● Extract your changes from your old site and mount/copy them into
ContentBox’s Docker Image - let’s look at that first
● Update your existing site to use some ContentBox Docker Image magic -
we’ll look at this in a little while
Let’s startup a site with ContentBox image
● docker run -p 8888:8080 
-e 'INSTALL=true' 
-e 'CFCONFIG_ADMINPASSWORD=guardians' 
-e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/thor?useUnicode=tru
e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" 
-e 'DB_CLASS=org.gjt.mm.mysql.Driver' 
-e 'DB_USER=thor 
-e 'DB_PASSWORD=topsecret’ 
ortussolutions/contentbox
http://127.0.0.1:8888/
Folder Structure - Where are my Files?
Working with Docker where everything is in the image already is a little weird to
say the least.
You only need what is different in your local files
● Mount the persistent files as a volume
● Mount / Copy the Changes
Let’s add our Media into the Image
docker run -p 8888:8080 
-e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/thor?useUnicode=true&cha
racterEncoding=UTF-8&useLegacyDatetimeCode=true" 
-e 'DB_CLASS=org.gjt.mm.mysql.Driver' 
-e 'DB_USER=thor 
-e 'DB_PASSWORD=topsecret’ 
-v c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media
ortussolutions/contentbox
http://127.0.0.1:8888
Let’s add our ContentBox-Custom folder into the
Image
docker run -p 8888:8080
-e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=true&am
p;characterEncoding=UTF-8&useLegacyDatetimeCode=true"
-e 'DB_CLASS=org.gjt.mm.mysql.Driver'
-e 'DB_USER=starlord'
-e 'DB_PASSWORD=starlord'
-v c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media -v
C:/www/contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/co
ntentbox-custom ortussolutions/contentbox
http://127.0.0.1:8888/
Live coding moment of truth
Deploy to the Cloud!!!!
Want to try it out, use my link and get $100 in credit to play with
https://m.do.co/c/7fd11f7cfdf2
Live coding moment of truth
Deploy to the Cloud!!!!
First, we need to get the files to the server.
Lets just use SSH Copy for now, or FTP, because that’s how it’s done, right?
We’ll upload them into /contentbox-zero-to-hero
/contentbox-hero-to-zero/media
/contentbox-hero-to-zero/itb-1/modules_app/contentbox-custom
Live coding moment of truth
Deploy to the Cloud!!!!
docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=true&char
acterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e
'DB_USER=starlord' -e 'DB_PASSWORD=starlord' -v
/contentbox-zero-to-hero/media:/app/includes/shared/media -v
/contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/contentbox-custom
ortussolutions/contentbox
http://dockerdemo.cloudgq.com:8888
Clustering your Docker Images
That’s what Docker is great for… and Docker Swarm is a great way to get
started.
Things to Consider
Files - Any files you have would need to be persisted to a shared drive between servers,
block storage on Digital ocean works great here ( show example )
Sessions - Sessions are usually stored in the server memory, more servers means more
memory not the same memory.
Baking your code into Docker Images
Having to share your code on every server, or putting it on a shared drive is not a
good workflow.
Your code should only change when you deploy a new version.
Things that change in your app, need to be separated like Media, etc
So lets build a docker image with our Content.
Docker File
FROM ortussolutions/contentbox
COPY modules_app/contentbox-custom /app/modules_app/contentbox-custom
Build a Docker Image with Docker File
docker build -t gpickin/itb-docker-demo:20190503.0.1 .
Push our Docker image to Docker Hub
docker push gpickin/itb-docker-demo:20190503.0.1
Docker Run with our Built Image locally
docker run -p 8888:8080 -e 'INSTALL=true' -e
'CFCONFIG_ADMINPASSWORD=guardians' -e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=tru
e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e
'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e
'DB_PASSWORD=starlord' -v
c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media
gpickin/itb-docker-demo:20190503.0.1
Docker Run with our Built Image on DO
docker run -p 8888:8080 -e 'INSTALL=true' -e
'CFCONFIG_ADMINPASSWORD=guardians' -e
"DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=tru
e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e
'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e
'DB_PASSWORD=starlord' -v /contentbox-zero-to-hero/media:/app/includes/shared/media
-v
/contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/content
box-custom gpickin/itb-docker-demo:20190503.0.1
Questions
Want More?
Docker Mastery Course - https://www.udemy.com/docker-mastery/
Ortus Solutions Website - https://www.ortussolutions.com/events
Slack Channel - http://boxteam.herokuapp.com/
Twitter - https://twitter.com/ortussolutions/
CF Summit 2019 ( Las Vegas ) - Talk to us about a Training after the conference
Thanks
Thanks everyone
There are a few more great sessions left, don’t miss out.
Hope to see you all next year at Into the Box
And CF Summit later in the year
Travel Safe

Contenu connexe

Tendances

Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPDana Luther
 
Living the Nomadic life - Nic Jackson
Living the Nomadic life - Nic JacksonLiving the Nomadic life - Nic Jackson
Living the Nomadic life - Nic JacksonParis Container Day
 
Drush in the Composer Era
Drush in the Composer EraDrush in the Composer Era
Drush in the Composer EraPantheon
 
Docker for PHP Developers - php[world] 2017
Docker for PHP Developers - php[world] 2017Docker for PHP Developers - php[world] 2017
Docker for PHP Developers - php[world] 2017Chris Tankersley
 
Configuring Django projects for multiple environments
Configuring Django projects for multiple environmentsConfiguring Django projects for multiple environments
Configuring Django projects for multiple environmentsApptension
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configurationlutter
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by StepKim Stefan Lindholm
 
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 ProductionBen Hall
 
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014zshoylev
 
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.DrupalCampDN
 
JavaOne 2014: Taming the Cloud Database with jclouds
JavaOne 2014: Taming the Cloud Database with jcloudsJavaOne 2014: Taming the Cloud Database with jclouds
JavaOne 2014: Taming the Cloud Database with jcloudszshoylev
 
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)Ben Hall
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsBen Hall
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeSoshi Nemoto
 
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)Ben Hall
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Paul Chao
 
Añadiendo Jenkins al entorno para Integración continua
Añadiendo Jenkins al entorno para Integración continuaAñadiendo Jenkins al entorno para Integración continua
Añadiendo Jenkins al entorno para Integración continuaCésar Martín Ortiz Pintado
 

Tendances (20)

Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
 
Living the Nomadic life - Nic Jackson
Living the Nomadic life - Nic JacksonLiving the Nomadic life - Nic Jackson
Living the Nomadic life - Nic Jackson
 
Drush in the Composer Era
Drush in the Composer EraDrush in the Composer Era
Drush in the Composer Era
 
Docker for PHP Developers - php[world] 2017
Docker for PHP Developers - php[world] 2017Docker for PHP Developers - php[world] 2017
Docker for PHP Developers - php[world] 2017
 
Configuring Django projects for multiple environments
Configuring Django projects for multiple environmentsConfiguring Django projects for multiple environments
Configuring Django projects for multiple environments
 
Script it
Script itScript it
Script it
 
MySQL in your laptop
MySQL in your laptopMySQL in your laptop
MySQL in your laptop
 
Challenges of container configuration
Challenges of container configurationChallenges of container configuration
Challenges of container configuration
 
Varnish Configuration Step by Step
Varnish Configuration Step by StepVarnish Configuration Step by Step
Varnish Configuration Step by Step
 
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
 
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014
Taming the Cloud Database with Apache jclouds, ApacheCon Europe 2014
 
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.
Drupal 7 Deployment Using Apache Ant. Dmitriy Svetlichniy.
 
JavaOne 2014: Taming the Cloud Database with jclouds
JavaOne 2014: Taming the Cloud Database with jcloudsJavaOne 2014: Taming the Cloud Database with jclouds
JavaOne 2014: Taming the Cloud Database with jclouds
 
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)
 
Real World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js ApplicationsReal World Lessons on the Pain Points of Node.js Applications
Real World Lessons on the Pain Points of Node.js Applications
 
Making environment for_infrastructure_as_code
Making environment for_infrastructure_as_codeMaking environment for_infrastructure_as_code
Making environment for_infrastructure_as_code
 
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)
 
Docker workshop 0507 Taichung
Docker workshop 0507 Taichung Docker workshop 0507 Taichung
Docker workshop 0507 Taichung
 
Añadiendo Jenkins al entorno para Integración continua
Añadiendo Jenkins al entorno para Integración continuaAñadiendo Jenkins al entorno para Integración continua
Añadiendo Jenkins al entorno para Integración continua
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 

Similaire à ITB2019 Containerizing ContentBox CMS - Gavin Pickin

Containerizing ContentBox CMS
Containerizing ContentBox CMSContainerizing ContentBox CMS
Containerizing ContentBox CMSGavin Pickin
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tipsSamuel Chow
 
Introduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxDataIntroduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxDataInfluxData
 
Boosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore DockerBoosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore DockerPeter Nazarov
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoHannes Hapke
 
DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline  DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline Docker, Inc.
 
Perspectives on Docker
Perspectives on DockerPerspectives on Docker
Perspectives on DockerRightScale
 
MySQL docker with demo by Ramana Yeruva
MySQL docker with demo by Ramana YeruvaMySQL docker with demo by Ramana Yeruva
MySQL docker with demo by Ramana YeruvaMysql User Camp
 
ContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small businessContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small businessDocker-Hanoi
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdfAbid Malik
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and TricksKevin Cross
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpackNodeXperts
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdfOKLABS
 
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 Peekmsyukor
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For DevelopmentLaura Frank Tacho
 
How to Dockerize Web Application using Docker Compose
How to Dockerize Web Application using Docker ComposeHow to Dockerize Web Application using Docker Compose
How to Dockerize Web Application using Docker ComposeEvoke Technologies
 

Similaire à ITB2019 Containerizing ContentBox CMS - Gavin Pickin (20)

Containerizing ContentBox CMS
Containerizing ContentBox CMSContainerizing ContentBox CMS
Containerizing ContentBox CMS
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
 
Introduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxDataIntroduction to Docker and Monitoring with InfluxData
Introduction to Docker and Monitoring with InfluxData
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
Boosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore DockerBoosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore Docker
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize Django
 
DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline  DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline
 
Perspectives on Docker
Perspectives on DockerPerspectives on Docker
Perspectives on Docker
 
MySQL docker with demo by Ramana Yeruva
MySQL docker with demo by Ramana YeruvaMySQL docker with demo by Ramana Yeruva
MySQL docker with demo by Ramana Yeruva
 
ContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small businessContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small business
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks
 
Improving build solutions dependency management with webpack
Improving build solutions  dependency management with webpackImproving build solutions  dependency management with webpack
Improving build solutions dependency management with webpack
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
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
DockerDocker
Docker
 
Docker workshop GDSC_CSSC
Docker workshop GDSC_CSSCDocker workshop GDSC_CSSC
Docker workshop GDSC_CSSC
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
 
How to Dockerize Web Application using Docker Compose
How to Dockerize Web Application using Docker ComposeHow to Dockerize Web Application using Docker Compose
How to Dockerize Web Application using Docker Compose
 

Plus de Ortus Solutions, Corp

Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionOrtus Solutions, Corp
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Ortus Solutions, Corp
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfOrtus Solutions, Corp
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfOrtus Solutions, Corp
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfOrtus Solutions, Corp
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfOrtus Solutions, Corp
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfOrtus Solutions, Corp
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfOrtus Solutions, Corp
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfOrtus Solutions, Corp
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfOrtus Solutions, Corp
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfOrtus Solutions, Corp
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfOrtus Solutions, Corp
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfOrtus Solutions, Corp
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfOrtus Solutions, Corp
 

Plus de Ortus Solutions, Corp (20)

Ortus Government.pdf
Ortus Government.pdfOrtus Government.pdf
Ortus Government.pdf
 
Luis Majano The Battlefield ORM
Luis Majano The Battlefield ORMLuis Majano The Battlefield ORM
Luis Majano The Battlefield ORM
 
Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI Brad Wood - CommandBox CLI
Brad Wood - CommandBox CLI
 
Secure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusionSecure your Secrets and Settings in ColdFusion
Secure your Secrets and Settings in ColdFusion
 
Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023Daniel Garcia ContentBox: CFSummit 2023
Daniel Garcia ContentBox: CFSummit 2023
 
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdfITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
ITB_2023_Human-Friendly_Scheduled_Tasks_Giancarlo_Gomez.pdf
 
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdfITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
ITB_2023_CommandBox_Multi-Server_-_Brad_Wood.pdf
 
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdfITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
ITB_2023_The_Many_Layers_of_OAuth_Keith_Casey_.pdf
 
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdfITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
ITB_2023_Relationships_are_Hard_Data_modeling_with_NoSQL_Curt_Gratz.pdf
 
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdfITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
ITB_2023_Extend_your_contentbox_apps_with_custom_modules_Javier_Quintero.pdf
 
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdfITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
ITB_2023_25_Most_Dangerous_Software_Weaknesses_Pete_Freitag.pdf
 
ITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdfITB_2023_CBWire_v3_Grant_Copley.pdf
ITB_2023_CBWire_v3_Grant_Copley.pdf
 
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdfITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
ITB_2023_Practical_AI_with_OpenAI_-_Grant_Copley_.pdf
 
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdfITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
ITB_2023_When_Your_Applications_Work_As_a_Team_Nathaniel_Francis.pdf
 
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdfITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
ITB_2023_Faster_Apps_That_Wont_Get_Crushed_Brian_Klaas.pdf
 
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdfITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
ITB_2023_Chatgpt_Box_Scott_Steinbeck.pdf
 
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdfITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
ITB_2023_CommandBox_Task_Runners_Brad_Wood.pdf
 
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdfITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
ITB_2023_Create_as_many_web_sites_or_web_apps_as_you_want_George_Murphy.pdf
 
ITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdfITB2023 Developing for Performance - Denard Springle.pdf
ITB2023 Developing for Performance - Denard Springle.pdf
 
Enterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdfEnterprise Messaging with RabbitMQ.pdf
Enterprise Messaging with RabbitMQ.pdf
 

Dernier

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Strongerpanagenda
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationKnoldus Inc.
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructureitnewsafrica
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfNeo4j
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersNicole Novielli
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integrationmarketing932765
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 

Dernier (20)

Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Data governance with Unity Catalog Presentation
Data governance with Unity Catalog PresentationData governance with Unity Catalog Presentation
Data governance with Unity Catalog Presentation
 
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical InfrastructureVarsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
Varsha Sewlal- Cyber Attacks on Critical Critical Infrastructure
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Connecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdfConnecting the Dots for Information Discovery.pdf
Connecting the Dots for Information Discovery.pdf
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software DevelopersA Journey Into the Emotions of Software Developers
A Journey Into the Emotions of Software Developers
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS:  6 Ways to Automate Your Data IntegrationBridging Between CAD & GIS:  6 Ways to Automate Your Data Integration
Bridging Between CAD & GIS: 6 Ways to Automate Your Data Integration
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 

ITB2019 Containerizing ContentBox CMS - Gavin Pickin

  • 3. Who am I? ● Software Consultant for Ortus Solutions ● Work with ColdBox, CommandBox, ContentBox every day ● Working with Coldfusion for 20 years ● Working with Javascript just as long ● Love learning and sharing the lessons learned ● From New Zealand, live in Bakersfield, Ca ● Loving wife, lots of kids, and countless critters http://www.gpickin.com and @gpickin on twitter http://www.ortussolutions.com
  • 4. Docker Images ● Ortus Solutions has built and supports a few docker images, the most common and popular ○ ortussolutions/commandbox https://hub.docker.com/r/ortussolutions/commandbox/ ● Ortus Solutions has built one especially for ContentBox ○ Adds several bells and whistles to help get your ContentBox app ready to deploy to docker ○ ContentBox Image updated for Version 4.0 release.
  • 5. CommandBox Docker Image https://hub.docker.com/r/ortussolutions/commandbox/ ● Gives you commandbox, ready to go. ● Run any CF Engine or WAR file ● Use CFConfig to configure your cfml engine ● Use environment values for overrides ● Put your files in the /app directory and start the server of your choice Your app is yours, and how you set it up, config it, is all up to you.
  • 6. ContentBox Docker Image https://hub.docker.com/r/ortussolutions/contentbox/ ContentBox’s image is built upon CommandBox, so it’s everything plus: ● Datasource config ● Distributed caching for content, rss etc ● Environment Overrides for ContentBox settings ● Embedded H2 DB support ● And more
  • 9. ContentBox Image - Express version ● The express version uses an in memory H2 database. ● Perfect for setting up for testing. ● If you start with the express=true and install=true you can install a fresh contentbox site into the H2 database docker run -p 8080:8080 -e express=true -e install=true ortussolutions/contentbox
  • 10. ContentBox Image - Persisting Data Docker doesn’t care about your data / files. If you want to keep it, persist it. Here we mount 2 volumes into the H2 data folder and the media folder docker run -p 8080:8080 -e express=true -e install=true -v `pwd`/contentbox-db:/data/contentbox/db -v `pwd`/contentbox-media:/app/includes/shared/media ortussolutions/contentbox
  • 11. ContentBox Image - Environment Variables This image allows you to pass in a series of environment variables to default your values when installing ContentBox ● Express ● Install ● HEALTHCHECK_URI ● FWREINIT_PW ● SESSION_STORAGE ● DISTRIBUTED_CACHE ● H2_DIR ● contentbox_default_* ● ORM_SECONDARY_CACHE ● ORM_DIALECT ● REMOVE_CBADMIN ● JVM_HEAPSIZE
  • 12. ContentBox Image - Database Connections ● To programmatically configure the database on container start, environment variables which represent your datasource configuration should be provided. There are two patterns supported: ○ DB_DRIVER configuration - which may be used for Adobe Coldfusion servers ○ DB_CLASS configuration - which configures a datasource by JDBC driver and connection string.
  • 13. ContentBox Image - Database Connections MYSQL Setup docker run -p 8080:8080 -e 'express=true' -e 'installer=true' -e 'cfconfig_adminPassword=myS3cur3P455' -e "DB_CONNECTION_STRING=jdbc:mysql://mysqlhost:3306/contentbox_docker?useUnicode=true&characterEncoding=UT F-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=contentbox_user' -e 'DB_PASSWORD=myS3cur3P455' -v `pwd`/contentbox-media:/app/includes/shared/media ortussolutions/contentbox
  • 14. ContentBox Image - Database Connections MSSQL Setup on Adobe docker run -p 8080:8080 -e 'CFENGINE=adobe@11' -e 'installer=true' -e 'cfconfig_adminPassword=myS3cur3P455' -e 'DB_DRIVER=MSSQLServer' -e 'DB_HOST=sqlserver_host' -e 'DB_PORT=1433' -e 'DB_NAME=contentbox_docker' -e 'DB_USER=sa' -e 'DB_PASSWORD=myS3cur3P455' -v `pwd`/contentbox-media:/app/includes/shared/media ortussolutions/contentbox
  • 15. ContentBox Image - Distributed Cache ● By default, this image is configured to use the connected database as a caching storage as well. This will allow you to distribute your stack with pseudo-caching enabled. ● However, if you would like to have a real distributed cache like Redis or Couchbase connected to your images, you will need to use the appropriate CacheBox providers and your own custom CacheBox.cfc configuration file. For an example of using Redis, check out our compose repository: https://github.com/Ortus-Solutions/docker-contentbox-distributed
  • 16. What if I have a ContentBox site already? Two Options ● Extract your changes from your old site and mount/copy them into ContentBox’s Docker Image - let’s look at that first ● Update your existing site to use some ContentBox Docker Image magic - we’ll look at this in a little while
  • 17. Let’s startup a site with ContentBox image ● docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/thor?useUnicode=tru e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=thor -e 'DB_PASSWORD=topsecret’ ortussolutions/contentbox http://127.0.0.1:8888/
  • 18. Folder Structure - Where are my Files? Working with Docker where everything is in the image already is a little weird to say the least. You only need what is different in your local files ● Mount the persistent files as a volume ● Mount / Copy the Changes
  • 19. Let’s add our Media into the Image docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/thor?useUnicode=true&cha racterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=thor -e 'DB_PASSWORD=topsecret’ -v c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media ortussolutions/contentbox http://127.0.0.1:8888
  • 20. Let’s add our ContentBox-Custom folder into the Image docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=true&am p;characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e 'DB_PASSWORD=starlord' -v c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media -v C:/www/contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/co ntentbox-custom ortussolutions/contentbox http://127.0.0.1:8888/
  • 21. Live coding moment of truth Deploy to the Cloud!!!! Want to try it out, use my link and get $100 in credit to play with https://m.do.co/c/7fd11f7cfdf2
  • 22. Live coding moment of truth Deploy to the Cloud!!!! First, we need to get the files to the server. Lets just use SSH Copy for now, or FTP, because that’s how it’s done, right? We’ll upload them into /contentbox-zero-to-hero /contentbox-hero-to-zero/media /contentbox-hero-to-zero/itb-1/modules_app/contentbox-custom
  • 23. Live coding moment of truth Deploy to the Cloud!!!! docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=true&char acterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e 'DB_PASSWORD=starlord' -v /contentbox-zero-to-hero/media:/app/includes/shared/media -v /contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/contentbox-custom ortussolutions/contentbox http://dockerdemo.cloudgq.com:8888
  • 24. Clustering your Docker Images That’s what Docker is great for… and Docker Swarm is a great way to get started. Things to Consider Files - Any files you have would need to be persisted to a shared drive between servers, block storage on Digital ocean works great here ( show example ) Sessions - Sessions are usually stored in the server memory, more servers means more memory not the same memory.
  • 25. Baking your code into Docker Images Having to share your code on every server, or putting it on a shared drive is not a good workflow. Your code should only change when you deploy a new version. Things that change in your app, need to be separated like Media, etc So lets build a docker image with our Content.
  • 26. Docker File FROM ortussolutions/contentbox COPY modules_app/contentbox-custom /app/modules_app/contentbox-custom
  • 27. Build a Docker Image with Docker File docker build -t gpickin/itb-docker-demo:20190503.0.1 .
  • 28. Push our Docker image to Docker Hub docker push gpickin/itb-docker-demo:20190503.0.1
  • 29. Docker Run with our Built Image locally docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=tru e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e 'DB_PASSWORD=starlord' -v c:/www/contentbox-zero-to-hero/media:/app/includes/shared/media gpickin/itb-docker-demo:20190503.0.1
  • 30. Docker Run with our Built Image on DO docker run -p 8888:8080 -e 'INSTALL=true' -e 'CFCONFIG_ADMINPASSWORD=guardians' -e "DB_CONNECTION_STRING=jdbc:mysql://itb.cloudgq.com:3306/starlord?useUnicode=tru e&characterEncoding=UTF-8&useLegacyDatetimeCode=true" -e 'DB_CLASS=org.gjt.mm.mysql.Driver' -e 'DB_USER=starlord' -e 'DB_PASSWORD=starlord' -v /contentbox-zero-to-hero/media:/app/includes/shared/media -v /contentbox-zero-to-hero/itb-1/modules_app/contentbox-custom:/app/modules_app/content box-custom gpickin/itb-docker-demo:20190503.0.1
  • 32. Want More? Docker Mastery Course - https://www.udemy.com/docker-mastery/ Ortus Solutions Website - https://www.ortussolutions.com/events Slack Channel - http://boxteam.herokuapp.com/ Twitter - https://twitter.com/ortussolutions/ CF Summit 2019 ( Las Vegas ) - Talk to us about a Training after the conference
  • 33. Thanks Thanks everyone There are a few more great sessions left, don’t miss out. Hope to see you all next year at Into the Box And CF Summit later in the year Travel Safe