SlideShare a Scribd company logo
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/contentbox-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/contentbox-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

More Related Content

What's hot

Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring Cloud
Matt Stine
 
A Series of Fortunate Events: Building an Operator in Java
A Series of Fortunate Events: Building an Operator in JavaA Series of Fortunate Events: Building an Operator in Java
A Series of Fortunate Events: Building an Operator in Java
VMware Tanzu
 
Alfresco Integrations - Alfresco Devcon 2012
Alfresco Integrations - Alfresco Devcon 2012Alfresco Integrations - Alfresco Devcon 2012
Alfresco Integrations - Alfresco Devcon 2012
Jared Ottley
 
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingSpring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
VMware Tanzu
 
Kubernetes your next application server
Kubernetes  your next application serverKubernetes  your next application server
Kubernetes your next application server
Red Hat Developers
 
Simplify Cloud Applications using Spring Cloud
Simplify Cloud Applications using Spring CloudSimplify Cloud Applications using Spring Cloud
Simplify Cloud Applications using Spring Cloud
Ramnivas Laddad
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Orkhan Gasimov
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
Ben Wilcock
 
Resilient and Adaptable Systems with Cloud Native APIs
Resilient and Adaptable Systems with Cloud Native APIsResilient and Adaptable Systems with Cloud Native APIs
Resilient and Adaptable Systems with Cloud Native APIs
VMware Tanzu
 
Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015
Sami Ekblad
 
You've Made Kubernetes Available to Your Developers, Now What?
You've Made Kubernetes Available to Your Developers, Now What?You've Made Kubernetes Available to Your Developers, Now What?
You've Made Kubernetes Available to Your Developers, Now What?
cornelia davis
 
A Hitchhiker's Guide to Cloud-Native API Gateways
A Hitchhiker's Guide to Cloud-Native API GatewaysA Hitchhiker's Guide to Cloud-Native API Gateways
A Hitchhiker's Guide to Cloud-Native API Gateways
QAware GmbH
 
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entitySpring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Toni Jara
 
Ten Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-onsTen Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-ons
Atlassian
 
Spring Boot Whirlwind Tour
Spring Boot Whirlwind TourSpring Boot Whirlwind Tour
Spring Boot Whirlwind Tour
VMware Tanzu
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?
Orkhan Gasimov
 
Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production Boost
VMware Tanzu
 
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1tServerless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Toshiaki Maki
 
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API DevelopmentIntroduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Colin Su
 
Full-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJSFull-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJS
VMware Tanzu
 

What's hot (20)

Building Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring CloudBuilding Distributed Systems with Netflix OSS and Spring Cloud
Building Distributed Systems with Netflix OSS and Spring Cloud
 
A Series of Fortunate Events: Building an Operator in Java
A Series of Fortunate Events: Building an Operator in JavaA Series of Fortunate Events: Building an Operator in Java
A Series of Fortunate Events: Building an Operator in Java
 
Alfresco Integrations - Alfresco Devcon 2012
Alfresco Integrations - Alfresco Devcon 2012Alfresco Integrations - Alfresco Devcon 2012
Alfresco Integrations - Alfresco Devcon 2012
 
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re GoingSpring Cloud Function: Where We Were, Where We Are, and Where We’re Going
Spring Cloud Function: Where We Were, Where We Are, and Where We’re Going
 
Kubernetes your next application server
Kubernetes  your next application serverKubernetes  your next application server
Kubernetes your next application server
 
Simplify Cloud Applications using Spring Cloud
Simplify Cloud Applications using Spring CloudSimplify Cloud Applications using Spring Cloud
Simplify Cloud Applications using Spring Cloud
 
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
Cloud Native Spring - The role of Spring Cloud after Kubernetes became a main...
 
Microservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloudMicroservices - java ee vs spring boot and spring cloud
Microservices - java ee vs spring boot and spring cloud
 
Resilient and Adaptable Systems with Cloud Native APIs
Resilient and Adaptable Systems with Cloud Native APIsResilient and Adaptable Systems with Cloud Native APIs
Resilient and Adaptable Systems with Cloud Native APIs
 
Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015Vaadin and Spring at Devoxx UK 2015
Vaadin and Spring at Devoxx UK 2015
 
You've Made Kubernetes Available to Your Developers, Now What?
You've Made Kubernetes Available to Your Developers, Now What?You've Made Kubernetes Available to Your Developers, Now What?
You've Made Kubernetes Available to Your Developers, Now What?
 
A Hitchhiker's Guide to Cloud-Native API Gateways
A Hitchhiker's Guide to Cloud-Native API GatewaysA Hitchhiker's Guide to Cloud-Native API Gateways
A Hitchhiker's Guide to Cloud-Native API Gateways
 
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entitySpring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
Spring IO 2016 - Spring Cloud Microservices, a journey inside a financial entity
 
Ten Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-onsTen Battle-Tested Tips for Atlassian Connect Add-ons
Ten Battle-Tested Tips for Atlassian Connect Add-ons
 
Spring Boot Whirlwind Tour
Spring Boot Whirlwind TourSpring Boot Whirlwind Tour
Spring Boot Whirlwind Tour
 
Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?Spring Cloud: Why? How? What?
Spring Cloud: Why? How? What?
 
Spring Boot—Production Boost
Spring Boot—Production BoostSpring Boot—Production Boost
Spring Boot—Production Boost
 
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1tServerless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
Serverless with Spring Cloud Function, Knative and riff #SpringOneTour #s1t
 
Introduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API DevelopmentIntroduction to Google Cloud Endpoints: Speed Up Your API Development
Introduction to Google Cloud Endpoints: Speed Up Your API Development
 
Full-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJSFull-Stack Development with Spring Boot and VueJS
Full-Stack Development with Spring Boot and VueJS
 

Similar to Containerizing ContentBox CMS

ITB2019 Containerizing ContentBox CMS - Gavin Pickin
ITB2019 Containerizing ContentBox CMS - Gavin PickinITB2019 Containerizing ContentBox CMS - Gavin Pickin
ITB2019 Containerizing ContentBox CMS - Gavin Pickin
Ortus Solutions, Corp
 
Into The Box 2018 | Content box + docker
Into The Box 2018 | Content box + dockerInto The Box 2018 | Content box + docker
Into The Box 2018 | Content box + docker
Ortus Solutions, Corp
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
Samuel Chow
 
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
Dana Luther
 
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
InfluxData
 
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
NodeXperts
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize Django
Hannes Hapke
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
JasonStraughan1
 
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.
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
Thomas Tong, FRM, PMP
 
ContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small businessContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small business
Docker-Hanoi
 
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
Mysql User Camp
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
Abid Malik
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
OKLABS
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
Sabyrzhan Tynybayev
 
Introduction of webpack 4
Introduction of webpack 4Introduction of webpack 4
Introduction of webpack 4
Vijay Shukla
 
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
Ben Hall
 
Boosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore DockerBoosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore Docker
Peter Nazarov
 
WP VERITAS InfoScale Storage and Dockers Intro - v8
WP VERITAS InfoScale Storage and Dockers Intro - v8WP VERITAS InfoScale Storage and Dockers Intro - v8
WP VERITAS InfoScale Storage and Dockers Intro - v8
Rajagopal Vaideeswaran
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks
Kevin Cross
 

Similar to Containerizing ContentBox CMS (20)

ITB2019 Containerizing ContentBox CMS - Gavin Pickin
ITB2019 Containerizing ContentBox CMS - Gavin PickinITB2019 Containerizing ContentBox CMS - Gavin Pickin
ITB2019 Containerizing ContentBox CMS - Gavin Pickin
 
Into The Box 2018 | Content box + docker
Into The Box 2018 | Content box + dockerInto The Box 2018 | Content box + docker
Into The Box 2018 | Content box + docker
 
Docker primer and tips
Docker primer and tipsDocker primer and tips
Docker primer and tips
 
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
 
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
 
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
 
PDXPortland - Dockerize Django
PDXPortland - Dockerize DjangoPDXPortland - Dockerize Django
PDXPortland - Dockerize Django
 
Docker for Developers
Docker for DevelopersDocker for Developers
Docker for Developers
 
DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline  DCSF 19 Building Your Development Pipeline
DCSF 19 Building Your Development Pipeline
 
Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
ContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small businessContainerDayVietnam2016: Dockerize a small business
ContainerDayVietnam2016: Dockerize a small business
 
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
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
 
Docker Introduction.pdf
Docker Introduction.pdfDocker Introduction.pdf
Docker Introduction.pdf
 
ABCs of docker
ABCs of dockerABCs of docker
ABCs of docker
 
Introduction of webpack 4
Introduction of webpack 4Introduction of webpack 4
Introduction of webpack 4
 
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
 
Boosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore DockerBoosting Sitecore Development With Sitecore Docker
Boosting Sitecore Development With Sitecore Docker
 
WP VERITAS InfoScale Storage and Dockers Intro - v8
WP VERITAS InfoScale Storage and Dockers Intro - v8WP VERITAS InfoScale Storage and Dockers Intro - v8
WP VERITAS InfoScale Storage and Dockers Intro - v8
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks
 

More from Gavin Pickin

Itb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinItb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin Pickin
Gavin Pickin
 
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
Gavin Pickin
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLEAN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
Gavin Pickin
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
Gavin Pickin
 
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Gavin Pickin
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
Gavin Pickin
 
BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...
Gavin Pickin
 
How do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and ClientHow do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and Client
Gavin Pickin
 
Just Mock It - Mocks and Stubs
Just Mock It - Mocks and StubsJust Mock It - Mocks and Stubs
Just Mock It - Mocks and Stubs
Gavin Pickin
 
How do I write Testable Javascript?
How do I write Testable Javascript?How do I write Testable Javascript?
How do I write Testable Javascript?
Gavin Pickin
 
Getting your Hooks into Cordova
Getting your Hooks into CordovaGetting your Hooks into Cordova
Getting your Hooks into Cordova
Gavin Pickin
 
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusionSetting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Gavin Pickin
 

More from Gavin Pickin (12)

Itb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin PickinItb 2021 - Bulding Quick APIs by Gavin Pickin
Itb 2021 - Bulding Quick APIs by Gavin Pickin
 
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
ColdBox APIs + VueJS - powering Mobile, Desktop and Web Apps with 1 VueJS cod...
 
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLEAN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
AN EXERCISE IN CLEANER CODE - FROM LEGACY TO MAINTAINABLE
 
3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API3 WAYS TO TEST YOUR COLDFUSION API
3 WAYS TO TEST YOUR COLDFUSION API
 
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
Take home your very own free Vagrant CFML Dev Environment - Presented at dev....
 
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
How do I write Testable Javascript - Presented at dev.Objective() June 16, 2016
 
BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...BDD Testing and Automating from the trenches - Presented at Into The Box June...
BDD Testing and Automating from the trenches - Presented at Into The Box June...
 
How do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and ClientHow do I write Testable Javascript so I can Test my CF API on Server and Client
How do I write Testable Javascript so I can Test my CF API on Server and Client
 
Just Mock It - Mocks and Stubs
Just Mock It - Mocks and StubsJust Mock It - Mocks and Stubs
Just Mock It - Mocks and Stubs
 
How do I write Testable Javascript?
How do I write Testable Javascript?How do I write Testable Javascript?
How do I write Testable Javascript?
 
Getting your Hooks into Cordova
Getting your Hooks into CordovaGetting your Hooks into Cordova
Getting your Hooks into Cordova
 
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusionSetting up your Multi Engine Environment - Apache Railo and ColdFusion
Setting up your Multi Engine Environment - Apache Railo and ColdFusion
 

Recently uploaded

“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
Claudio Di Ciccio
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 

Recently uploaded (20)

“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”“I’m still / I’m still / Chaining from the Block”
“I’m still / I’m still / Chaining from the Block”
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 

Containerizing ContentBox CMS

  • 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/contentbox-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/contentbox-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