Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Avaliar em qual repositório o Dockerfile deve ser armazenado #10

Closed
fjuniorr opened this issue Jun 8, 2022 · 5 comments
Closed

Avaliar em qual repositório o Dockerfile deve ser armazenado #10

fjuniorr opened this issue Jun 8, 2022 · 5 comments
Assignees
Labels
enhancement New feature or request

Comments

@fjuniorr
Copy link

fjuniorr commented Jun 8, 2022

Atualmente o Dockerfile utilizado no age7 está em um repo dedicado. Encontramos um erro hoje porque os arquivos requirements.txt estavam duplicados e divergiram (livemark não foi inserido como dependência em um deles).

Isso levantou a pergunta sobre como armazenar o Dockerfile de determinado projeto. Algumas fontes para leitura:

@gabrielbdornas gabrielbdornas transferred this issue from another repository Aug 31, 2022
@gabrielbdornas
Copy link
Contributor

Acredito que este issue esteja relacionado com o #131. Penso podermos deixar o processo de criação e publicação da imagem no docker hub totalmente dentro deste repositório. Isso simplificaria os repositórios utilizados e facilitaria no momento da manutenção.

@gabrielbdornas gabrielbdornas self-assigned this Feb 13, 2023
@gabrielbdornas gabrielbdornas added the enhancement New feature or request label Feb 13, 2023
This was referenced Feb 13, 2023
@gabrielbdornas
Copy link
Contributor

gabrielbdornas commented Feb 15, 2023

Em 15/02/2023:

Caso processo funcione (necessário testar por pelo menos dois dias):

  • Arquivar repositório docker-age7.
  • Excluir imagem dockerhub.
  • Executar target make container-bash para verificar seu funcionamento.
  • Executar novo target make image para atestar seu funcionamento apenas se arquivos dependência forem modificados.
  • Excluir imagem gabrielbdornas/dtamg-age7:latest da máquina via docker rmi -f 17a67456a3c0

gabrielbdornas added a commit that referenced this issue Feb 15, 2023
gabrielbdornas added a commit that referenced this issue Feb 15, 2023
@gabrielbdornas
Copy link
Contributor

gabrielbdornas commented Feb 16, 2023

Em 16/02/2023 vi que o processo não rodou. Ao acessar a máquina e executar o arquivo conforme rotina cron ./docker.sh percebi que o novo comando responsável pela criação da nova imagem docker não havia rodado:

docker build . --file Dockerfile --tag dtamg/age7:latest

Rodei o comando docker build . --file Dockerfile --tag dtamg/age7:latest isoladamente e percebi que ele não estava conseguindo realizar as instalações por bloqueio na proxy. Problema foi resolvido com a criação do arquivo ~/.docker/config.json conforme sugestão da documentação docker. Incluí a mesma informação de proxy utilizada na máquina CKAN (git config --list).

Na segunda tentativa de executar o comando o problema da proxy foi resolvido, mas o erro de instalação do pacote R dtamg interrompeu a criação da imagem:

Installing dtamg [0.2.5] ...
        FAILED
Error: install of package 'dtamg' failed [error code 1]
Error installing package 'dtamg':
=================================

Warning in untar2(tarfile, files, list, exdir, restore_times) :
  skipping pax global extended headers
* installing *source* package ‘dtamg’ ...
** using staged installation
** R
Error in parse(outFile) :
  /tmp/RtmpzeXFb1/R.INSTALL67e119fbb98e/transparencia-mg-dtamg-r-461666e/R/flatten_resource.R:41:87: unexpected '>'
40:   resources_field_names <- c(list(resource$schema$field_names),
41:                  purrr::map(fk_resources, ~ dp$get_resource(.x)$schema$field_names)) |>
                                                                                          ^
ERROR: unable to collate and parse R files for package ‘dtamg’
* removing ‘/usr/local/lib/R/site-library/.renv/1/dtamg’
Traceback (most recent calls last):
12: renv::restore()
11: renv_restore_run_actions(project, diff, current, lockfile, rebuild)
10: renv_install_impl(records)
 9: renv_install_staged(records)
 8: renv_install_default(records)
 7: handler(package, renv_install_package(record))
 6: renv_install_package(record)
 5: withCallingHandlers(renv_install_package_impl(record), error = function(e) {
        vwritef("\tFAILED")
        writef(e$output)
    })
 4: renv_install_package_impl(record)
 3: r_cmd_install(package, path)
 2: r_exec_error(package, output, "install", status)
 1: stop(error)
Execution halted

O comando docker images mostrou que nenhuma imagem dtamg/age7:latest havia sido criada.

gabriel.dornas@cge-pda:~/age7$ docker images
REPOSITORY                  TAG                    IMAGE ID       CREATED          SIZE
<none>                      <none>                 6ea75ad9f365   24 minutes ago   1.09GB
<none>                      <none>                 9bdb214c8a49   43 minutes ago   125MB
gabrielbdornas/dtamg-age7   latest                 17a67456a3c0   8 months ago     1.51GB
python                      3.9.12-slim-bullseye   29cc46b21611   9 months ago     125MB

Obs.: Deletei as imagens "criaada" erradamente para evitar lixo na máquina via:

docker rmi -f 6ea75
docker rmi -f 9bdb2
docker rmi -f 29cc4

Rodando processo no actions do repo docker-age7 vi que a versão do pacote dtamg instalada é a 0.2.6 e não a 0.2.5 que foi utilizada no meu processo. Conferindo o repositório dtamg-r constatei que, de fato, a versão mais recente do pacote é a 0.2.6, tendo sido esta correção registrada neste issue.

image

Acreditando que esta diferença se deu pelo fato do arquivo renv.lock existente na raiz do repo age7 estar desatualizado atualizei o arquivo para conter exatamente as mesmas informações do presente no repositório dtamg-r e nenhum outro problema foi encontrado para criação da imagem.

gabrielbdornas added a commit that referenced this issue Feb 16, 2023
gabrielbdornas added a commit that referenced this issue Feb 16, 2023
gabrielbdornas added a commit that referenced this issue Feb 16, 2023
@gabrielbdornas
Copy link
Contributor

Processo rodando (./docker.sh) após correções realizadas acima. Verificar se a nova estratégia para rodar a rotina irá funcionar:

make image && docker run -i --rm -v $PROJECT_PATH:/work_dir \

Neste sentido, a criação de imagem deverá ocorrer somente se alguma modificação nos arquivo Dockerfile e renv.lock forem identificadas pelo Makefile:

age7/Makefile

Lines 8 to 10 in 914c0e1

image: Dockerfile renv.lock
@echo 'Creating Docker Image...'
@docker build . --file Dockerfile --tag dtamg/age7:latest

Caso contrário processo ETL deverá ser acionado automaticamente:

age7/docker.sh

Lines 3 to 14 in 914c0e1

make image && docker run -i --rm -v $PROJECT_PATH:/work_dir \
-v /pwd:/pwd \
-v $PROJECT_PATH/.local/share/AzureR:/root/.local/share/AzureR \
-e CKAN_HOST=$CKAN_HOST \
-e CKAN_KEY=$CKAN_KEY \
-e HTTPS_PROXY=$HTTPS_PROXY \
-e DB_HOST=$DB_HOST \
-e DB_USER=$DB_USER \
-e DB_DATABASE=$DB_DATABASE \
-e DB_PASSWORD=$DB_PASSWORD \
-e RETICULATE_PYTHON=$RETICULATE_PYTHON \
dtamg/age7:latest ./all.sh

@gabrielbdornas
Copy link
Contributor

gabrielbdornas commented Feb 16, 2023

Teste acima não funcionou. Retirei então a geração da imagem do arquivo ./docker.sh. Sempre que alguma modificação for realizada deverá ser rodado manualmente make image.

Importante também esta melhoria no dpckan para que tudo funcionasse.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants