Slide 1

Slide 1 text

CONFIGURING CFML DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES GUUST NIEUWENHUIS

Slide 2

Slide 2 text

ABOUT ME Guust Nieuwenhuis Managing Partner @ We Are North Full Stack Web Wizard Masa CMS Born in The Netherlands Living in Belgium Football coach Mountainbiker

Slide 3

Slide 3 text

CONFIGURING CFML DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES GUUST NIEUWENHUIS

Slide 4

Slide 4 text

12FACTOR.NET The twelve-factor app is a methodology for building software-as-a-service apps

Slide 5

Slide 5 text

https://12factor.net/

Slide 6

Slide 6 text

I. Codebase II. Dependencies III. Config IV. Backing services V. Build, release, run VI. Processes VII. Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes

Slide 7

Slide 7 text

I. Codebase II. Dependencies III. Config IV. Backing services V. Build, release, run VI. Processes VII. Port binding VIII. Concurrency IX. Disposability X. Dev/prod parity XI. Logs XII. Admin processes

Slide 8

Slide 8 text

STORE CONFIG IN THE ENVIRONMENT An app’s con fi g is everything that is likely to vary between deploys (staging, production, developer environments, etc)

Slide 9

Slide 9 text

Environment variables

Slide 10

Slide 10 text

A VARIABLE WHOSE VALUE IS SET OUTSIDE THE APPLICATION AND AFFECTS THE WAY APPLICATIONS BEHAVE Since 1979

Slide 11

Slide 11 text

$ printenv __CFBundleIdentifier=com.apple.Terminal TMPDIR=/var/folders/39/dlwg4phj09508hq4d8zhrs600000gn/T/ XPC_FLAGS=0x0 LaunchInstanceID=7B6325E4-B6DB-4A0B-8CC9-1FC70EECBAD7 TERM=xterm-256color SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.055kmmIwsv/Listeners SECURITYSESSIONID=186a6 XPC_SERVICE_NAME=0 TERM_PROGRAM=Apple_Terminal TERM_PROGRAM_VERSION=447 PWD=/Users/guustnieuwenhuis SHLVL=2 SHELL=/bin/zsh HOME=/Users/guustnieuwenhuis LOGNAME=guustnieuwenhuis USER=guustnieuwenhuis PATH=/Users/guustnieuwenhuis/.gem/ruby/3.0.0/bin: OLDPWD=/Users/guustnieuwenhuis LC_CTYPE=UTF-8 _=/usr/bin/printenv

Slide 12

Slide 12 text

$ printenv HOME HOME=/Users/guustnieuwenhuis

Slide 13

Slide 13 text

$ echo $HOME HOME=/Users/guustnieuwenhuis

Slide 14

Slide 14 text

$ cat .env REACT_APP_API_KEY=your-development-api-key REACT_APP_DATABASE_URL=https://your-development-database.com REACT_APP_PROJECT_ID=your-development-project-id

Slide 15

Slide 15 text

Docker environment variables

Slide 16

Slide 16 text

Docker build Docker run Docker compose

Slide 17

Slide 17 text

$ docker build -t app --build-arg VERSION=1.0 . [+] Building 0.9s (6/6) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 36B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/lucee/lucee:latest => [1/1] FROM docker.io/lucee/lucee => CACHED [2/1] RUN rm -rf /var/www/* => exporting to image => => exporting layers => => writing image sha256:18c080b6cbfed0ac44c4848ffb2f14e6f12d86a83c8c32d3176e341f4e6 => => naming to docker.io/library/app

Slide 18

Slide 18 text

$ docker build -t app --build-arg VERSION=${BITBUCKET_TAG} . [+] Building 0.9s (6/6) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 36B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/lucee/lucee:latest => [1/1] FROM docker.io/lucee/lucee => CACHED [2/1] RUN rm -rf /var/www/* => exporting to image => => exporting layers => => writing image sha256:18c080b6cbfed0ac44c4848ffb2f14e6f12d86a83c8c32d3176e341f4e6 => => naming to docker.io/library/app

Slide 19

Slide 19 text

FROM lucee/lucee ENV VERSION=${VERSION} Docker fi le

Slide 20

Slide 20 text

$ docker run -p 80:8888 -e DEBUG=1 lucee/lucee NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.r 22-Jun-2023 09:25:23.588 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS N 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS V 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Arch 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm java.lang=ALL-UNNAMED 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm UNNAMED …

Slide 21

Slide 21 text

$ docker run -p 80:8888 --env DEBUG=1 lucee/lucee NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.r 22-Jun-2023 09:25:23.588 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS N 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS V 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Arch 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm java.lang=ALL-UNNAMED 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm UNNAMED …

Slide 22

Slide 22 text

$ docker run -p 80:8888 --env-file ./.env lucee/lucee NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.r 22-Jun-2023 09:25:23.588 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Serv 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS N 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS V 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Arch 22-Jun-2023 09:25:23.600 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.601 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATA 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm java.lang=ALL-UNNAMED 22-Jun-2023 09:25:23.612 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Comm UNNAMED …

Slide 23

Slide 23 text

version: "3.7" services: app: image: lucee/lucee environment: - DEBUG=1 docker-compose.yml

Slide 24

Slide 24 text

version: "3.7" services: app: image: lucee/lucee env_file: ./.env docker-compose.yml

Slide 25

Slide 25 text

Environment variables precedence 1. Set using docker compose run -e in the CLI 2. Substituted from your shell 3. Set using the environment attribute in the Compose file 4. Use of the --env-file argument in the CLI 5. Use of the env_file attribute in the Compose file 6. Set using an .env file placed at base of your project directory 7. Set in a container image in the ENV directive. Having any ARG or ENV setting in a Dockerfile evaluates only if there is no Docker Compose entry for environment, env_file or run --env.

Slide 26

Slide 26 text

Configuring Adobe CF

Slide 27

Slide 27 text

https://helpx.adobe.com/in/coldfusion/using/docker-images-coldfusion.html

Slide 28

Slide 28 text

version: "3.7" services: app: image: adobecoldfusion/coldfusion2021 environment: docker-compose.yml - acceptEULA=YES - serial=xxx - password=adminpassword - enableSecureProfile=true

Slide 29

Slide 29 text

Configuring Lucee

Slide 30

Slide 30 text

https://docs.lucee.org/guides/Various/system-properties.html

Slide 31

Slide 31 text

version: "3.7" services: app: image: lucee/lucee environment: docker-compose.yml - LUCEE_ADMIN_ENABLED=false # JFreeChart Extension Version 1.0.19.19 - LUCEE_EXTENSIONS=D46B46A9-A0E3-44E1-D972A04AC3A8DC10;version=1.0.19. - LUCEE_PRESERVE_CASE=true

Slide 32

Slide 32 text

lucee-server.xml

Slide 33

Slide 33 text

lucee-server.xml

Slide 34

Slide 34 text

version: "3.7" services: app: build: context: . dockerfile: Dockerfile environment: - LUCEEPASSWORD=password docker-compose.yml

Slide 35

Slide 35 text

FROM lucee/lucee ENV VERSION=${VERSION:-dev} COPY entrypoint.sh /entrypoint.sh # Engage CMD ["/entrypoint.sh"] Docker fi le

Slide 36

Slide 36 text

#!/usr/bin/env sh # Take the Lucee password from the environment, if it exists if [ -z "$LUCEEPASSWORD" ] then echo "\$LUCEEPASSWORD is empty, no password configured" else echo $LUCEEPASSWORD > /opt/lucee/server/lucee-server/context/ password.txt fi # Start services exec /usr/bin/supervisord -n -c /etc/supervisord.conf entrypoint.sh

Slide 37

Slide 37 text

Configuring Commandbox

Slide 38

Slide 38 text

https://hub.docker.com/r/ortussolutions/commandbox/

Slide 39

Slide 39 text

version: "3.7" services: app: image: ortussolutions/commandbox environment: docker-compose.yml - BOX_SERVER_APP_CFENGINE=lucee@5 - BOX_SERVER_PROFILE=development - BOX_SERVER_CFCONFIGFILE=/config/cfconfig.json

Slide 40

Slide 40 text

Configuring Masa CMS

Slide 41

Slide 41 text

All settings.ini.cfm settings Format: MURA_{setting}

Slide 42

Slide 42 text

[settings] appreloadkey=appreload mode=production [production] admindir=/admin admindomain= adminemail= adminssl=false allowautoupdates=true allowedIndexFiles=index.cfm,index.json,index.html allowlocalfiles=false alwaysUseLocalRenderer=false assetdir=/s3assets assetpath= autodiscoverplugins=true autoresetpasswords=false autoupdateurl=https://github.com/MasaCMS/MasaCMS/archive/main.zip bcryptpasswords=true clientmanagement=false settings.ini.cfm

Slide 43

Slide 43 text

version: "3.7" services: app: image: lucee/lucee environment: docker-compose.yml - MURA_ADMIN_USERNAME: admin - MURA_ADMIN_PASSWORD: admin - MURA_ADMINEMAIL: [email protected] - MURA_APPRELOADKEY: appreload - MURA_SITEIDINURLS: "true" - MURA_INDEXFILEINURLS: "true" - MURA_DBTYPE: mysql - MURA_DBCONNECTIONSTRING: “jdbc:mysql://masa_mysql:3306/masadb" - MURA_DBCLASS: com.mysql.jdbc.Driver - MURA_DBUSERNAME: root - MURA_DBPASSWORD: rootpassword - MURA_DBHOST: masa_mysql - MURA_DBPORT: 3306

Slide 44

Slide 44 text

Configuring own apps

Slide 45

Slide 45 text

server.system.environment

Slide 46

Slide 46 text

version: "3.7" services: docker-compose.yml mysql: image: mysql:latest environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: testdb app: image: lucee/lucee environment: - DBTYPE: mysql - DBCLASS: com.mysql.jdbc.Driver - DBCONNECTIONSTRING: "jdbc:mysql://mysql:3306/testdb" - DBUSERNAME: root - DBPASSWORD: rootpassword

Slide 47

Slide 47 text

component { this.datasources = { testdb = { class = server.system.environment.DBCLASS, connectionString = server.system.environment.DBCONNECTIONSTRING, username = server.system.environment.DBUSERNAME, password = server.system.environment.DBPASSWORD } }; } Application.cfc

Slide 48

Slide 48 text

Configuring on AWS

Slide 49

Slide 49 text

No content

Slide 50

Slide 50 text

CONFIGURING CFML DOCKER CONTAINERS THROUGH ENVIRONMENT VARIABLES [email protected] https://www.linkedin.com/in/guustnieuwenhuis 
 www.wearenorth.eu

Slide 51

Slide 51 text

No content