Docker Containers Everywhere

2 minute read

Docker is your best friend when it comes to AEM! Yes there are so many countless ways of running AEM instances. But AEM will always be better with Docker. AEM in docker allows you to run multiple instances of AEM at a drop of a hat. No need to copy files around or look for Jar’s.

If you want to quickly start a local demo AEM 6.5 instance on port 4502 with debug port 30303 all you have to do is run this command using aemdesign/aem image

docker run --name author \
-e "TZ=Australia/Sydney" \
-e ",crx3,crx3tar,localdev" \
-e "AEM_JVM_OPTS=-server -Xms248m -Xmx1524m -XX:MaxDirectMemorySize=256M -XX:+CMSClassUnloadingEnabled -Djava.awt.headless=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=58242,suspend=n" \
-p4502:8080 -d \
-p30303:58242 -d \
  • Don’t forget to have your AEM License key handy you gona need it for the AEM license page, and
  • Don’t forget the debug port you can use it in your IntelliJ Ultimate, you can read more about this here Run/Debug Configuration: JSR45 Compatible Server

Then you decide that you want to compare latest AEM to AEM 6.4 with a tweak to port 4512 and image tag aemdesign/aem:6.4.0 you are instantly in business

docker run --name author64 \
-e "TZ=Australia/Sydney" \
-e ",crx3,crx3tar,localdev" \
-e "AEM_JVM_OPTS=-server -Xms248m -Xmx1524m -XX:MaxDirectMemorySize=256M -XX:+CMSClassUnloadingEnabled -Djava.awt.headless=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=58242,suspend=n" \
-p4512:8080 -d \
-p30313:58242 -d \

Then if you decide to run AEM 6.5 publish instance, same command with minor update to AEM_RUNMODE to publish using same aemdesign/aem image and you have a clean publish starting up

docker run --name publish \
-e "TZ=Australia/Sydney" \
-e ",crx3,crx3tar,localdev" \
-e "AEM_JVM_OPTS=-server -Xms248m -Xmx1524m -XX:MaxDirectMemorySize=256M -XX:+CMSClassUnloadingEnabled -Djava.awt.headless=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=58242,suspend=n" \
-p4503:8080 -d \
-p40404:58242 -d \

Wait there is more, if you like the sound and simplicity of AEM containers you gona love the aemdesign/dispatcher container!

Setting up Dispatcher is hard! For one you have to know apache which is about 20 years old. Then you need to know Dispatcher… which is also a tricky as it docs.. oh the docs.. you gona love trolling though them all to create your ultimate dispatcher config!

OR you run this to start your publish dispatcher pointing to your publish docker

docker run --name publish-dispatcher \
-e APACHE_MODULES="/dispatcher/httpd/modules" \
-e APACHE_SSL_SUBJ="/C=AU/ST=VIC/L=Melbourne/O=AEM.Design/CN=dispatcher" \
-e APACHE_RUN_USER="apache" \
-e APACHE_RUN_GROUP="apache" \
-e APACHE_LOGLEVEL="debug" \
-e DISPATCHER_NAME="dispatcher" \
-e RENDERER_HOST="$(route -n get 2>/dev/null | awk '/interface: / {print $2}' | xargs ifconfig  | grep 'inet ' | grep -v '' | awk '{print $2}' | head -1)" \
-p 8080:8080 \
-p 8433:8433 -d \
  • Yes RENDERER_HOST does run an intimidating bash command to establish your local IP address 😎😻

You don’t need to access dispatcher container files to check the logs as they are all being redirected to container log, like all good container should! In JSON format native to all your log monitoring tool! 😎😻 You can monitor logs with docker logs command

docker logs -tf publish-dispatcher --since=2019-07-16

This command will tail the error log from the container for you to see. Change the parameter since to the date from wich you want to view the log from, log will get long, but that what log shipping is for 😎😻

Hope this will help you with your AEM Docker journey!

Have a look at our other handy docker containers at

Leave a Comment