Unverified Commit ff15e1e9 authored by Alberto Miranda's avatar Alberto Miranda ♨️
Browse files

Add `docker-compose.yml`

parent effa8110
Loading
Loading
Loading
Loading

docker-compose.yml

0 → 100644
+240 −0
Original line number Diff line number Diff line
version: '3.6'

# Common configuration options for compute node services
x-compute-node: &compute-node
  image: slurm-docker-cluster-node:${IMAGE_TAG:-21.08.6}
  build:
    context: slurm-docker-cluster-node
    args:
      SLURM_TAG: ${SLURM_TAG:-slurm-21-08-6-1}
      SHARED_USER_NAME: ${SHARED_USER_NAME:-user}
      SHARED_USER_UID: ${SHARED_USER_UID:-1000}
      SHARED_GROUP_NAME: ${SHARED_GROUP_NAME:-user}
      SHARED_GROUP_GID: ${SHARED_GROUP_GID:-1000}
  command: [ "slurmd" ]
  tmpfs:
    #################### systemd #############################################
    # temporary file systems
    - /tmp
    - /run
  volumes:
    #################### systemd #############################################
    # cgroups
    - /sys/fs/cgroup:/sys/fs/cgroup:ro
    #################### MUNGE ###############################################
    # munge configuration files
    - etc_munge:/etc/munge
    # munge key file (for authentication)
    - ./volumes/etc_munge/munge.key:/etc/munge/munge.key
    #################### SLURM ###############################################
    # slurm config files
    - ./volumes/etc_slurm:/etc/slurm
    # slurm source code (for debugging)
    - /home/amiranda/var/projects/slurm:/slurm
    # slurm job directory
    - slurm_jobdir:/data
    #################### SCORD ###############################################
    # scord install prefix
    - ./volumes/scord_prefix:/scord_prefix
    # scord ld.so.conf.d
    - ./volumes/ld.so.conf.d/libscord.conf:/etc/ld.so.conf.d/libscord.conf
    #################### CARGO ###############################################
    - ./volumes/cargo_prefix:/cargo_prefix
    - ./volumes/ld.so.conf.d/libcargo.conf:/etc/ld.so.conf.d/libcargo.conf
    #################### ENTRYPOINT ##########################################
    - ./volumes/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh
    #################### USER ################################################
    - ./volumes/user_home:/home/amiranda
    - /home/amiranda/var/projects/scord/repo:/home/amiranda/repo
    - /home/amiranda/var/projects/cargo/repo:/home/amiranda/cargo/repo
  networks:
    - slurm_cluster
  expose:
    - "6818"
  depends_on:
    - "slurmctld"
  # Allow container to connect to host machine using the
  # `host.docker.internal` DNS name
  extra_hosts:
    - "host.docker.internal:host-gateway"
  cap_add:
    - SYS_PTRACE

services:
#  # DNS proxy server to allow containers to update the host's DNS configuration
#  # This allows the host to resolve the containers' hostnames
#  dns:
#    image: defreitas/dns-proxy-server:latest
#    container_name: dns
#    volumes:
#      - /var/run/docker.sock:/var/run/docker.sock
#      - /etc/resolv.conf:/etc/resolv.conf
#    environment:
#      - MG_LOG_LEVEL=ERROR
#    networks:
#      - slurm_cluster

  # Database server where Slurm will keep accounting information
  mysql:
    image: mariadb:10.10
    hostname: mysql
    container_name: mysql
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_DATABASE: slurm_acct_db
      MYSQL_USER: slurm
      MYSQL_PASSWORD: password
    volumes:
      - var_lib_mysql:/var/lib/mysql
    networks:
      - slurm_cluster

  # Slurm DBD daemon
  slurmdbd:
    image: slurm-docker-cluster:${IMAGE_TAG:-21.08.6}
    build:
      context: slurm-docker-cluster
      args:
        SLURM_TAG: ${SLURM_TAG:-slurm-21-08-6-1}
    command: [ "slurmdbd" ]
    container_name: slurmdbd
    hostname: slurmdbd
    volumes:
      # munge configuration files
      - etc_munge:/etc/munge
      # munge key file (for authentication)
      - ./volumes/etc_munge/munge.key:/etc/munge/munge.key
      # slurm config files
      - ./volumes/etc_slurm:/etc/slurm
      # slurm source code (for debugging)
      - /home/amiranda/var/projects/slurm:/slurm
      # slurm job directory
      - slurm_jobdir:/data
    networks:
      - slurm_cluster
    expose:
      - "6819"
    depends_on:
      - mysql

  # Slurm controller daemon
  slurmctld:
    image: slurm-docker-cluster:${IMAGE_TAG:-21.08.6}
    command: [ "slurmctld" ]
    container_name: slurmctld
    hostname: slurmctld
    volumes:
      # munge configuration files
      - etc_munge:/etc/munge
      # munge key file (for authentication)
      - ./volumes/etc_munge/munge.key:/etc/munge/munge.key
      # slurm config files
      - ./volumes/etc_slurm:/etc/slurm
      # slurm source code (for debugging)
      - /home/amiranda/var/projects/slurm:/slurm
      # slurm job directory
      - slurm_jobdir:/data
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.129
    expose:
      - "6817"
    depends_on:
      - "slurmdbd"

  # Login node
  login:
    hostname: login.docker.cluster
    container_name: login
    command: [ "sshd" ]
    tmpfs:
    #################### systemd #############################################
    # temporary file systems
    - /tmp
    - /run
    <<: *compute-node
    volumes:
      #################### systemd #############################################
      # cgroups
      - /sys/fs/cgroup:/sys/fs/cgroup:ro
      #################### MUNGE ###############################################
      # munge configuration files
      - etc_munge:/etc/munge
      # munge key file (for authentication)
      - ./volumes/etc_munge/munge.key:/etc/munge/munge.key
      #################### SLURM ###############################################
      # slurm config files
      - ./volumes/etc_slurm:/etc/slurm
      # slurm source code (for debugging)
      - /home/amiranda/var/projects/slurm:/slurm
      # slurm job directory
      - slurm_jobdir:/data
      #################### SSHD ################################################
      # sshd configuration files
      - ./volumes/etc_ssh:/etc/ssh
      #################### SCORD ###############################################
      # scord install prefix
      - ./volumes/scord_prefix:/scord_prefix
      # scord ld.so.conf.d
      - ./volumes/ld.so.conf.d/libscord.conf:/etc/ld.so.conf.d/libscord.conf
      #################### CARGO ###############################################
      - ./volumes/cargo_prefix:/cargo_prefix
      - ./volumes/ld.so.conf.d/libcargo.conf:/etc/ld.so.conf.d/libcargo.conf
      #################### ENTRYPOINT ##########################################
      - ./volumes/docker-~.sh:/usr/local/bin/docker-entrypoint.sh
      #################### USER ################################################
      - ./volumes/user_home:/home/amiranda
      - /home/amiranda/var/projects/scord/repo:/home/amiranda/repo
      - /home/amiranda/var/projects/cargo/repo:/home/amiranda/cargo/repo
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.128

  # Compute nodes
  c1:
    hostname: c1
    container_name: c1
    <<: *compute-node
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.10

  c2:
    hostname: c2
    container_name: c2
    <<: *compute-node
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.11

  c3:
    hostname: c3
    container_name: c3
    <<: *compute-node
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.12

  c4:
    hostname: c4
    container_name: c4
    <<: *compute-node
    networks:
      slurm_cluster:
        ipv4_address: 192.18.0.13

# Volumes to persist data
volumes:
  etc_munge:
  #  etc_slurm:
  slurm_jobdir:
  var_lib_mysql:

networks:
  slurm_cluster:
    driver: bridge
    name: slurm_cluster
    ipam:
      driver: default
      config:
        - subnet: 192.18.0.0/24