Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
4,367,573
Community Members
 
Community Events
168
Community Groups

Jira Data Center Docker for M1 processor with 2 nodes and debug mode

Hello!

In my previous article I showed how to create your own docker image with Atlassian Jira Data Center for M1 processors. But it is not enough for development of apps. We need to start 2 nodes and each node should be available for connecting in debug mode. I intended to modify my Dockerfile but then I found this repo which says that it can create an image of Jira Data Center for M1 processors. I tried it but it did not work for me. I made a couple of changes.

First of all I changed the base image in Dockerfile to

ARG BASE_IMAGE=arm64v8/adoptopenjdk:11.0.11_9-jdk-hotspot

And the file started to look like this

ARG BASE_IMAGE=arm64v8/adoptopenjdk:11.0.11_9-jdk-hotspot
FROM $BASE_IMAGE

ENV RUN_USER                                        jira
ENV RUN_GROUP                                       jira
ENV RUN_UID                                         2001
ENV RUN_GID                                         2001

# https://confluence.atlassian.com/display/JSERVERM/Important+directories+and+files
ENV JIRA_HOME                                       /var/atlassian/application-data/jira
ENV JIRA_INSTALL_DIR                                /opt/atlassian/jira

WORKDIR $JIRA_HOME

EXPOSE 8080

CMD ["/entrypoint.py"]
ENTRYPOINT ["/tini", "--"]

RUN apt-get update && apt-get upgrade -y \
    && apt-get install -y --no-install-recommends fontconfig python3 python3-jinja2 \
    && apt-get clean autoclean && apt-get autoremove -y && rm -rf /var/lib/apt/lists/*

ARG TINI_VERSION=v0.19.0
RUN arch=$(dpkg --print-architecture); \
    case "$arch" in \
       arm64) export ARCH="-arm64" ;; \
       *) export ARCH="" ;; \
    esac; \
    url="https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini${ARCH}" ; \
    curl "$url" -Lo /tini ; \
    chmod +x /tini

ARG MYSQL_DRIVER_VERSION=5.1.49
RUN export JIRA_LIB=$JIRA_INSTALL_DIR/lib                      \
    && mkdir -p $JIRA_LIB                                      \
    && export MYSQL_FILE_BASE=mysql-connector-java-$MYSQL_DRIVER_VERSION \
    && export MYSQL_FILE_TAR=$MYSQL_FILE_BASE.tar.gz           \
    && export MYSQL_FILE_BIN=$MYSQL_FILE_BASE-bin.jar          \
    && export MYSQL_DOWNLOAD_URL=https://dev.mysql.com/get/Downloads/Connector-J/$MYSQL_FILE_TAR \
    && rm -f $JIRA_LIB/mysql-connector-java*.jar               \
    && curl $MYSQL_DOWNLOAD_URL -Lo $MYSQL_FILE_TAR            \
    && tar xzf $MYSQL_FILE_TAR --strip=1                       \
    && cp $MYSQL_FILE_BIN $JIRA_LIB/$MYSQL_FILE_BIN

ARG JIRA_VERSION

# The link may change from version to version, check
# https://www.atlassian.com/ru/software/jira/download-archives
ARG DOWNLOAD_URL=https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-${JIRA_VERSION}.tar.gz

RUN groupadd --gid ${RUN_GID} ${RUN_GROUP} \
    && useradd --uid ${RUN_UID} --gid ${RUN_GID} --home-dir ${JIRA_HOME} --shell /bin/bash ${RUN_USER} \
    && echo PATH=$PATH > /etc/environment \
    \
    && mkdir -p                                     ${JIRA_INSTALL_DIR} \
    && curl -L --silent                             ${DOWNLOAD_URL} | tar -xz --strip-components=1 -C "${JIRA_INSTALL_DIR}" \
    && chmod -R "u=rwX,g=rX,o=rX"                   ${JIRA_INSTALL_DIR}/ \
    && chown -R root.                               ${JIRA_INSTALL_DIR}/ \
    && chown -R ${RUN_USER}:${RUN_GROUP}            ${JIRA_INSTALL_DIR}/logs \
    && chown -R ${RUN_USER}:${RUN_GROUP}            ${JIRA_INSTALL_DIR}/temp \
    && chown -R ${RUN_USER}:${RUN_GROUP}            ${JIRA_INSTALL_DIR}/work \
    \
    && sed -i -e 's/^JVM_SUPPORT_RECOMMENDED_ARGS=""$/: \${JVM_SUPPORT_RECOMMENDED_ARGS:=""}/g' ${JIRA_INSTALL_DIR}/bin/setenv.sh \
    && sed -i -e 's/^JVM_\(.*\)_MEMORY="\(.*\)"$/: \${JVM_\1_MEMORY:=\2}/g' ${JIRA_INSTALL_DIR}/bin/setenv.sh \
    && sed -i -e 's/-XX:ReservedCodeCacheSize=\([0-9]\+[kmg]\)/-XX:ReservedCodeCacheSize=${JVM_RESERVED_CODE_CACHE_SIZE:=\1}/g' ${JIRA_INSTALL_DIR}/bin/setenv.sh \
    \
    && touch /etc/container_id \
    && chown ${RUN_USER}:${RUN_GROUP}               /etc/container_id \
    && chown -R ${RUN_USER}:${RUN_GROUP}            ${JIRA_HOME}

# Must be declared after setting perms
VOLUME ["${JIRA_HOME}"]

COPY components/entrypoint/                  /
COPY components/support/                     /opt/atlassian/support
COPY components/config/                      /opt/atlassian/etc/

Then I modified a bit the build-image.sh file

#!/bin/zsh

set -x -o errexit -o pipefail

REPO="arm64/jira-software"
JIRA_VERSION="9.2.0"
MYSQL_DRIVER_VERSION="5.1.49"
# tini is a small helper library for Docker containers https://github.com/krallin/tini
# It makes sense to update.
TINI_VERSION="v0.19.0"

docker build \
  --no-cache \
  -t "$REPO:$JIRA_VERSION-arm64" \
  --build-arg JIRA_VERSION="$JIRA_VERSION" \
  --build-arg MYSQL_DRIVER_VERSION="$MYSQL_DRIVER_VERSION" \
  --build-arg TINI_VERSION="$TINI_VERSION" \
  .

And after it I ran ./build-image.sh

After the image had been created, I ran the following docker-compose.yml file

version: '3'

services:
  jira_node_1:
    depends_on:
      - postgresql
    image: arm64/jira-software:9.2.0-arm64
    networks:
      - jiranet
    volumes:
      - /Users/alexm/projects/prometheus/jira/shared:/var/atlassian/application-data/jira/shared
    ports:
      - '8080:8080'
      - '8000:8000'
    environment:
      - 'ATL_JDBC_URL=jdbc:postgresql://postgresql:5432/jiradb'
      - 'ATL_JDBC_USER=jira'
      - 'ATL_JDBC_PASSWORD=jellyfish'
      - 'ATL_DB_DRIVER=org.postgresql.Driver'
      - 'ATL_DB_TYPE=postgres72'
      - 'JVM_MINIMUM_MEMORY=2048m'
      - 'JVM_MAXIMUM_MEMORY=4096m'
      - 'JVM_SUPPORT_RECOMMENDED_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"'
      - 'CLUSTERED=true'
      - 'JIRA_NODE_ID=node_1'
    logging:
      # limit logs retained on host to 25MB
      driver: "json-file"
      options:
        max-size: "500k"
        max-file: "50"

  jira_node_2:
    depends_on:
      - postgresql
    image: arm64/jira-software:9.2.0-arm64
    networks:
      - jiranet
    volumes:
      - /Users/alexm/projects/prometheus/shared:/var/atlassian/application-data/jira/shared
    ports:
      - '8081:8080'
      - '8001:8000'
    environment:
      - 'ATL_JDBC_URL=jdbc:postgresql://postgresql:5432/jiradb'
      - 'ATL_JDBC_USER=jira'
      - 'ATL_JDBC_PASSWORD=jellyfish'
      - 'ATL_DB_DRIVER=org.postgresql.Driver'
      - 'ATL_DB_TYPE=postgres72'
      - 'JVM_MINIMUM_MEMORY=2048m'
      - 'JVM_MAXIMUM_MEMORY=4096m'
      - 'JVM_SUPPORT_RECOMMENDED_ARGS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:8000"'
      - 'CLUSTERED=true'
      - 'JIRA_NODE_ID=node_2'
    logging:
      # limit logs retained on host to 25MB
      driver: "json-file"
      options:
        max-size: "500k"
        max-file: "50"

  postgresql:
    image: postgres:9.5-alpine
    networks:
      - jiranet
    volumes:
      - postgresqldata:/var/lib/postgresql/data
    ports:
      - '5432:5432'
    environment:
      - 'POSTGRES_USER=jira'
      # CHANGE THE PASSWORD!
      - 'POSTGRES_PASSWORD=jellyfish'
      - 'POSTGRES_DB=jiradb'
      - 'POSTGRES_ENCODING=UNICODE'
      - 'POSTGRES_COLLATE=C'
      - 'POSTGRES_COLLATE_TYPE=C'
    logging:
      # limit logs retained on host to 25MB
      driver: "json-file"
      options:
        max-size: "500k"
        max-file: "50"

volumes:
  postgresqldata:
    external: false

networks:
  jiranet:
    driver: bridge

And as a result I had 2 nodes of Jira Software in debug mode. You can read more about this docker-compose.yml file in my previous article.

0 comments

Comment

Log in or Sign up to comment
TAGS

Atlassian Community Events