SIC 3.0 - Utilitzar imatges Docker Builder

Darrera actualització: 13-07-2021

Introducció

El SIC actualment utilitza la tecnologia Docker per a disposar d’un entorn aïllat i immutable de construcció que, a més pugui ser utilitzat i testejat pels mateixos proveïdors. Aquest how-to va dirigit a tots aquells perfils tècnics que tinguin la necessitat de simular i executar les imatges Docker en un entorn local tal i com ho realitza el SIC.

Ús del registre privat

En el Registre d’imatges corporatiu podreu trobar informació sobre el registre d’imatges, el codi font, la documentació associada i el procediment per a disposar d’accés.

Accés via consola web

Es pot accedir al Harbor a través de la seva consola web mitjançant: https://registreimatges.sic.intranet.gencat.cat. Un cop dins es pot navegar a través de les carpetes de les imatges del projecte gencat-sic-builders.

Login

Per a poder descarregar les imatges en local primer ens hem d’autenticar de la següent manera:

docker login https://registreimatges.sic.intranet.gencat.cat

Si no es tracta d’una imatge d’un projecte públic, caldrà introduir les credencials Gicar de l’usuari.

Descàrrega d’imatges

Un cop realitzada l’autenticació per línia de comandes, podem baixar-nos la imatge escollida mitjançant:

docker pull registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-3.6-8

On, en el cas d’exemple, estem descarregant-nos la imatge mvn-builder versió 1.0-3.6-8.

Execució de les imatges

Un cop descarregada la imatge Docker, la podem executar en el nostre entorn local mitjançant:

docker run -it --rm \
  --user="1000:$(id -g)" \
  --net=host \
  --name gencat-sic-builder \
  -v $HOME/.m2/settings.xml:/mnt/nexus/settings.xml \
  -v $HOME/.npmrc:/mnt/nexus/.npmrc:z \
  -v $PWD:/app \
  -w "/app" \
  registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-3.6-8 \
  mvn clean package

En aquest cas estem indicant què volem:

  • Que s’utilitzi l’usuari 1000 (necessari per a totes les imatges builders al SIC 3.0) i el grup de l’usuari Host.

  • Que s’utilitzi el controlador Host de docker per a compartir la xarxa del host.

  • Que el nom de la imatge executant-se tingui el nom gencat-sic-builder.

  • Que s’injectin com a volums els fitxers de configuració de maven i npm si són necessaris a la imatge.

  • Executar el goal de maven mvn clean package.

Logout

Si volem desconnectar-nos del Harbor, serà necessari realitzar un logout mitjançant:

docker logout https://registreimatges.sic.intranet.gencat.cat

Estendre d’imatges Docker de SIC

És possible generar una imatge Docker heretant d’una imatge del catàleg de SIC. Per a fer-ho, s’ha d’incloure al fitxer Dockerfile la instrucció FROM seguit del nom de la imatge base a utilitzar. Per exemple:

FROM registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-3.6-8

Per tal d’evitar errors en la construcció de la imatge estesa, cal tenir en compte algunes recomanacions:

  • Els usuaris s’hereten de la imatge base i, per defecte, els usuaris de les imatges del SIC disposen de permisos limitats i destinats exclusivament a la construcció d’artefactes. És a dir, si es necessita instal·lar o executar algun programa addicional serà necessari invocar la instrucció USER per a canviar l’usuari a root.

  • Si es vol mantenir el comportament predeterminat de les imatges del SIC, serà necessari agregar al final la instrucció ENTRYPOINT amb la mateixa instrucció que està configurada a la imatge base i assegurar-se que l’usuari d’execució del contenidor es correspon amb el que s’utilitza a la imatge base.

  • Cal revisar el fitxer Dockerfile de la imatge base del SIC a utilitzar per a assegurar-se que les instruccions que conté apliquen per a la nova imatge. Per exemple, en una imatge estesa l’equip responsable del manteniment i suport és diferent, per tant, cal canviar el MAINTAINER i/o LABEL per a indicar l’adreça de correu adient.

  • Altres criteris i recomanacions: Criteris creació contenidors docker.


Exemple:

# S'utilitza una imatge base del SIC.
FROM registreimatges.sic.intranet.gencat.cat/gencat-sic-builders/mvn-builder:1.0-2.2-8

# Es modifica el responsable de la imatge.
LABEL maintainer="change.me@gencat.cat"

# Es modifica l'usuari a root per a crear una variable d'entorn, instal·lar un programa addicional, donar permisos i eliminar fitxers innecessaris.
USER root
ENV FLEX_HOME='/flex-sdk'
RUN apk add --no-cache --virtual .build-deps curl tar unzip procps \
  && curl -fsSL -o /tmp/flex-sdk.zip http://download.macromedia.com/pub/flex/sdk/builds/flex3/flex_sdk_3.4.1.10084A.zip \
  && curl -fsSL -o /tmp/flex-sdk-libs.zip http://download.macromedia.com/pub/flex/sdk/datavisualization_sdk3.4.zip \
  && unzip /tmp/flex-sdk.zip -d "${FLEX_HOME}" \
  && unzip /tmp/flex-sdk-libs.zip -d "${FLEX_HOME}" \
  && chown -R 1000:1000 ${FLEX_HOME} \
  && chmod -R a+rx ${FLEX_HOME} \
  && apk del .build-deps \
  && rm -rf /tmp/* \
  && java -version \
  && mvn --version

# S'assegura que l'usuari d'execució dels contenidors associats a la imatge es correspongui amb l'utilitzat a la imatge base
USER 1000
CMD ["mvn", "-version"]