Skip to content

hajsf/mojo-docker

Repository files navigation

The Docker file:

Here's a line-by-line explanation of your Dockerfile:

# Use Ubuntu 24.04 as the base image
FROM ubuntu:24.04

This line is pulling the ubuntu Docker image with the tag 24.04 from Docker Hub.

# Set the environment variable to noninteractive mode
ENV DEBIAN_FRONTEND=noninteractive

This line is setting the DEBIAN_FRONTEND environment variable to noninteractive. This is often done in Dockerfiles to prevent interactive prompts from appearing during the build process.

# Set /app as the working directory
WORKDIR /app

This line is setting the working directory inside the Docker container to /app. All subsequent RUN, CMD, ENTRYPOINT, COPY, and ADD commands will be run relative to this directory.

# Copy the shell script and the .env file into the Docker image
COPY auth_script.sh .
COPY .env .

These lines are copying the auth_script.sh and .env files from your local machine (the Docker build context) to the current directory (/app) inside the Docker container.

RUN apt-get update &&  \
    # Install required dependencies
    apt-get install -y \
    python3 \
    python3-venv \
    gnupg \
    git \
    curl \
    wget \
    && apt-get clean && rm -rf /var/lib/apt/lists/* \
    # Download Modular setup requirements
    && set -eux; \
    keyring_location=/usr/share/keyrings/modular-installer-archive-keyring.gpg \
    && curl -1sLf 'https://dl.modular.com/bBNWiLZX5igwHXeu/installer/gpg.0E4925737A3895AD.key' | gpg --dearmor >> ${keyring_location} \
    && curl -1sLf 'https://dl.modular.com/bBNWiLZX5igwHXeu/installer/config.deb.txt?distro=debian&codename=wheezy' > /etc/apt/sources.list.d/modular-installer.list \
    && apt-get update \
    # Install Modular
    && apt-get install -y modular \
    && apt-get clean && rm -rf /var/lib/apt/lists/* \
    && echo 'export MODULAR_HOME="/root/.modular"' >> ~/.bashrc \
    && echo 'export PATH="/root/.modular/pkg/packages.modular.com_mojo/bin:$PATH"' >> ~/.bashrc \
    && /bin/bash -c "source ~/.bashrc" \
    # Install Mojo Lang
    && modular clean \
    && chmod +x auth_script.sh \
    && ./auth_script.sh \
    && modular install mojo \
    # Create a symbolic link that points from /usr/bin/python to /usr/bin/python3
    && ln -s /usr/bin/python3 /usr/bin/python \
    # Clean unrequired dependencies
    && apt-get remove -y \
    gnupg \
    && apt-get autoremove -y \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* \
    && apt-get purge -y --auto-remove \
    # Delete the files after you're done with them
    && rm auth_script.sh .env

This RUN command is doing a lot of things. It's updating the package lists, installing some packages, cleaning up, downloading and installing Modular and Mojo Lang, creating a symbolic link for Python, and cleaning up again, all had been run in a single RUN command to reduce the number of docker layers, and then reducing the docker image size

# Expose port 80
EXPOSE 80

This line is telling Docker that the Docker container will listen on port 80. This doesn't actually publish the port; it's more like documentation. To publish the port, you need to use the -p option with docker run.

# Set the entrypoint and command to keep the container running
ENTRYPOINT ["tail"]
CMD ["-f", "/dev/null"]

These lines are setting the default command that will be executed when the Docker container is run. In this case, the tail -f /dev/null command will be run, which does nothing and never exits. This is often used in Dockerfiles to keep the Docker container running indefinitely.

The Docker compose file:

Here's a line-by-line explanation of your Docker Compose file:

version: '3.8'

This line specifies the version of the Docker Compose file format. This should match the version of Docker Compose you are using.

services:

This line begins the section where you define your services. Each service represents a container that will be run when you start your Docker Compose application.

  mojo-sdk:

This line begins the definition of a service named mojo-sdk.

    container_name: mojo-sdk

This line sets the name of the container when it is run. If you don't specify this, Docker Compose will generate a name based on the project and service names.

    image: mojo-sdk:r0.6

This line specifies the Docker image to use for this service. In this case, it's using the mojo-sdk image with the tag r0.6.

    build:

This line begins a section where you can specify build options. These options will be used if you need to build the Docker image for this service.

      context: .

This line sets the build context to the current directory. The build context is the set of files that Docker can access during the build process.

      dockerfile: Dockerfile.mojosdk

This line specifies the name of the Dockerfile to use when building the Docker image. In this case, it's using Dockerfile.mojosdk.

      no_cache : true

This line tells Docker not to use the build cache when building the Docker image.

    volumes:

This line begins a section where you can specify volumes to mount in the container.

      - /home/hajsf/Development/mojo:/root

This line mounts the /home/hajsf/Development/mojo directory from the host machine to the /root directory in the container.

      - mojo:/root

This line mounts the mojo volume to the /root directory in the container.

    ports:

This line begins a section where you can specify ports to expose from the container.

      - 3000:80

This line maps port 3000 on the host machine to port 80 in the container.

volumes:

This line begins a section where you can define named volumes. Named volumes can be used by multiple services and persist data even when no containers are using them.

  mojo:

This line defines a named volume called mojo.

Result

Mojo Installed

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published