Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titlecentos7/Dockerfile
FROM centos:centos7.7.1908

ARG USER_NAME
ARG GROUP_NAME
ARG USER_ID
ARG GROUP_ID

#General packages
RUN yum -y install vim redhat-lsb-core sudo dbus-x11

#Install Git and Git LFS
RUN yum -y install epel-release
RUN yum -y install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm
RUN yum -y install git
RUN curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.rpm.sh | bash
RUN yum -y install git-lfs

#Install Java 11
RUN yum -y install java-11-openjdk-devel

#Prepare for Java
RUN mkdir -p /usr/java
RUN ln -s /usr/lib/jvm/java-openjdk /usr/java/default

#Install ACS required packages
RUN yum -y install ksh gcc gcc-c++ gcc-gfortran libX11-devel libffi-devel perl readline-devel bzip2 bzip2-devel openssl-devel openldap-devel libxml2-devel freetype-devel libxslt-devel sqlite-devel expat-devel tcl-devel tk-devel bison flex autoconf unzip dos2unix

#ARCHIVE
RUN yum -y install libtool libdb-devel

#ICD
RUN yum -y install cmake blas-devel cfitsio-devel wcslib-devel lapack-devel

#CONTROL
RUN yum -y install binutils-devel libmemcached-devel

#CORRCommon
RUN yum -y install kernel kernel-devel procmail

#TELCAL
RUN yum -y install motif-devel texlive

#RTI DDS
#RUN cd / && curl http://*****:*****@webdav.sco.alma.cl/restricted/propietary/RTI-RHEL6-x86_64.tar.bz2 | tar -xj

#Debugging Tools
RUN yum -y install gdb net-tools

#User configuration
RUN groupadd -r -g ${GROUP_ID} ${GROUP_NAME}
RUN useradd -r -m -u ${USER_ID} -g ${GROUP_NAME} ${USER_NAME}
RUN groupadd sudo
RUN usermod -aG sudo ${USER_NAME}
RUN echo new2me |passwd ${USER_NAME} --stdin
RUN echo "%sudo	 ALL=(ALL)	       ALL" >> /etc/sudoers
RUN echo "%sudo	 ALL=(ALL)	       NOPASSWD: ALL" >> /etc/sudoers
USER ${USER_NAME}

Docker Compose

Code Block
titledocker-compose.yml
version: "3.4"

x-args: &args
   USER_NAME: ${USER_NAME}
   GROUP_NAME: ${GROUP_NAME}
   USER_ID: ${USER_ID}
   GROUP_ID: ${GROUP_ID}

x-env: &env
   - DISPLAY=${DISPLAY}

x-volumes: &volumes
   - ${REPO_DIR}:/Repos:z
   - ${ALMA_DIR}/${CONTAINER_OSDIR}:/alma:z
   - ${HOME_DIR}/${CONTAINER_OSDIR}:/home/${USER_NAME}:z
   - /tmp/.X11-unix:/tmp/.X11-unix:z

x-acs-images: &common
   build:
      dockerfile: Dockerfile
      context: ./${CONTAINERIMAGE_OS}
      args:
         *args
   security_opt:
      - seccomp:unconfined
   image: acsacsdev-${CONTAINERIMAGE_OS}
   environment:
      *env
   volumes:
      *volumes
   working_dir: /home/${USER_NAME}
   networks:
    - acs-docker

services:
   fedora26:
      <<: *common
   fedora27:
      <<: *common
   fedora28:
      <<: *common
   fedora29:
      <<: *common
   fedora30:
      <<: *common
   fedora31:
      <<: *common
   fedora32:
      <<: *common
   centos6:
      <<: *common
   centos7:
      <<: *common
   centos8:
      <<: *common

networks:
   acs-docker:
      driver: bridge

Docker Compose .env

  • USER_NAME: The container user name
  • GROUP_NAME: The container user group
  • USER_ID: Id of local user executing docker instance
  • GROUP_ID: Group id from local user executing docker instance
  • ALMA_DIR: Path that has all the directories that will be mounted as /alma in the container, for instance in my examples is '/external/docker/'
    • Inside this directory there's a set of directories for each OS, each will be mounted as /alma for the different images/containers. For instance '/external/docker/centos7' will be mounted as /alma in centos7 containers
  • HOME_DIR: Path that will be mounted as the /home/$USER directory in the machine. The $HOME_DIR/$CONTAINER_OS will be mapped in the container to /home/almamgr with the default configuration
  • REPO_DIR: Path to the Git Repository. In my case inside this path (/external/Repos) I have 'almasw' and 'worktrees', which allow to have several worktrees for building without affecting other parts of the system
  • CONTAINERIMAGE_OS: Here  Here I define the default OS to be used. This can be overridden on command line if other OS is going to be used, but the default one should be defined here
  • CONTAINER_DIR: Here I define the default DIR to be used. This can be overridden on command line if other DIR is going to be used, but the default one should be defined here

...

Code Block
title.env example
USER_NAME=almamgr
GROUP_NAME=almamgr
USER_ID=1000
GROUP_ID=1000
ALMA_DIR=/external/docker/alma
HOME_DIR=/external/docker/home
REPO_DIR=/external/Repos
IMAGE_OS=centos7
CONTAINER_OSDIR=centos7

Makefile

Code Block
titleMakefile
images:=$(wildcard centos*)
build: $(images)
.PHONY: $(images)
all: $(images)
$(images):
        @CONTAINER@IMAGE_OS=$@ CONTAINER_DIR=$@ docker-compose build $@
$(addprefix up-,$(images)):
        @CONTAINER@IMAGE_OS=$(subst up-,,$@) CONTAINER_DIR=$(subst up-,,$@) docker-compose up $(subst up-,,$@)

$(addprefix down-,$(images)):
        @CONTAINER@IMAGE_OS=$(subst down-,,$@) CONTAINER_DIR=$(subst down-,,$@) docker-compose down $(subst down-,,$@)


Code Block
languagebash
titleExample
make centos7

...

Code Block
titleBash
#Executing centos7
docker-compose run centos7 bash
#Executing centos8 requires to define the CONTAINER_OS variable
IMAGE_OS=centos8 CONTAINER_OSDIR=centos8 docker-compose run centos8 bash

...