abntex / limarka

Escreva seu trabalho de conclusão de curso com as normas da ABNT em Markdown
https://github.com/abntex/limarka/wiki
MIT License
407 stars 41 forks source link

Criar imagem docker baseado no alpine #190

Open edusantana opened 5 years ago

edusantana commented 5 years ago

Comportamento esperado: criar imagem baseado no linux alpine. Atualmente o build é feito a partir do ruby:2-slim.

cauachagas commented 4 years ago

Para servir de referência, fiz dessa maneira

FROM alpine:latest

# Acelerando a instalação ao pular a instalação da documentação 
RUN mkdir -p /usr/local/etc \
  && { \
    echo 'install: --no-document'; \
    echo 'update: --no-document'; \
  } >> /etc/gemrc

# instalando dependencias 
RUN apk update
RUN apk --no-cache add \
    build-base \
    git \
    ca-certificates \
    ruby-dev \
    ruby-bundler \
    ruby-json \
    libffi-dev \
    openssl-dev \
    fontconfig \
    pdfgrep \
    poppler-utils \
    unzip \
    perl  \
    wget \
    xz \
    tar \
    fontconfig \
    freetype \
    lua \
    python2

RUN wget -O pandoc.tar.gz https://github.com/jgm/pandoc/releases/download/2.9.2.1/pandoc-2.9.2.1-linux-amd64.tar.gz \
    && tar xvzf pandoc.tar.gz --strip-components 1 -C /usr/local/ && rm pandoc.tar.gz

# Instala tinytex (/root/.TinyTex)
ENV PATH=/root/.TinyTeX/bin/x86_64-linuxmusl:$PATH
RUN wget -qO- "https://yihui.name/gh/tinytex/tools/install-unx.sh" | sh

# instala bibliotecas para o abntex2/limarka
RUN tlmgr install \
    abntex2 \
    babel-portuges \
    bookmark \
    caption \    
    enumitem \
    epstopdf-pkg \
    lastpage \
    lipsum \
    listings \
    memoir \
    microtype \
    pdflscape \
    pdfpages \
    psnfss \
    shipunov \
    texliveonfly \
    textcase \
    xcolor

# checagem de alguma depedências
RUN tlmgr --version
RUN pdflatex --version
RUN xelatex --version
RUN latexmk --version
RUN pandoc --version

RUN gem install limarka --pre
sergiopvilar commented 4 years ago

Eu consegui fazer a imagem assim:

FROM alpine:3.7

LABEL maintainer="eduardo.ufpb@gmail.com"

# Tentamos seguir as melhores práticas:
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

RUN apk update \
  && apk upgrade \
  && apk add --no-cache --update \
  alpine-sdk \
  build-base \
  fontconfig \
  pdfgrep \
  perl \
  poppler-utils \
  ruby-dev \
  ruby \
  unzip \
  wget

# Instala tinytex (/root/.TinyTex)
RUN wget -qO- "https://yihui.name/gh/tinytex/tools/install-unx.sh" | sh
ENV PATH="/root/bin:${PATH}"

# instala bibliotecas para o abntex2/limarka
RUN tlmgr install \
  abntex2 \
  babel-portuges \
  bookmark \
  enumitem \
  epstopdf-pkg \
  iftex \
  lastpage \
  lipsum \
  listings \
  caption \
  memoir \
  microtype \
  pdflscape \
  pdfpages \
  textcase \
  xcolor

# Configurando o idioma português
ENV MUSL_LOCALE_DEPS cmake make musl-dev gcc gettext-dev libintl
ENV MUSL_LOCPATH /usr/share/i18n/locales/musl

RUN apk add --no-cache \
  $MUSL_LOCALE_DEPS \
  && wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \
  && unzip musl-locales-master.zip \
  && cd musl-locales-master \
  && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \
  && cd .. && rm -r musl-locales-master

ENV LANG pt_BR.UTF8

# Instalação do pandoc
RUN wget -O pandoc.tar.gz https://github.com/jgm/pandoc/releases/download/2.9.2.1/pandoc-2.9.2.1-linux-amd64.tar.gz \
  && tar xvzf pandoc.tar.gz --strip-components 1 -C /usr/local/ && rm pandoc.tar.gz

RUN gem install limarka; exit 0

RUN apk del ruby-dev build-base wget alpine-sdk unzip cmake make musl-dev gcc

VOLUME ["/trabalho"]
WORKDIR /trabalho

CMD ["--help"]
ENTRYPOINT ["/usr/local/bundle/bin/limarka"]

Ia mandar uma branch mas tô sem permissão de escrita no repositório e não queria fazer um PR direto pra a master.

edusantana commented 4 years ago

@sergiopvilar não precisa fazer branch, é direto na master mesmo.

Antigamente eu fazia com branches mas era muito trabalhoso, depois eu reformulei o projeto adotando estratégias mais ágeis.

Se preferir, pode ler as instruções para desenvolvedores

edusantana commented 4 years ago

Eu recomendo manter um arquivo Dockerfile separado para o alphine, pois lembro que ele nem usa o apt-get.

sergiopvilar commented 4 years ago

@edusantana isso, ele usa o apk no lugar, porque tu acha melhor serem imagens separadas?

edusantana commented 4 years ago

Precisamos homologar as duas imagens e depois escolher qual será utilizada, por isso pedi que fossem dois arquivos diferentes, para poder testar separadamente. Não acho legal dois arquivos, com naturezas diferentes, manterem o mesmo caminho no controle de versão. Então vou criar alphine-ruby-latex-pandoc.dockerfile com o conteúdo que você colocou aí.

edusantana commented 4 years ago

RUN apk del ruby-dev build-base wget alpine-sdk unzip cmake make musl-dev gcc

@sergiopvilar Eu fiquei na dúvida também... apagar ou não apagar as dependências de desenvolvimento. Eu tinha optado por deixar, caso o usuário fosse adicionar algo mais... mas acho que é melhor apagar mesmo.