Blogul lui Zhenguo Zhang /2024/11/02/r-how-to-install-r-package-from-a-private-git-repo-in-dockerfile/ –
Ce se întâmplă dacă vedeți un pachet R grozav, dar este într-un depozit git privat; mai mult, trebuie să construiți o imagine docker și să instalați pachetul în ea? Principala provocare este cum puteți furniza acreditările git instalatorului de pachete în Dockerfile.
Am căutat pe Google și am găsit această postare, în care un Token de acces personal (PAT) este trecut în procesul de construire a dockerului printr-un argument. Acest lucru este în regulă, dar trebuie încă stocat PAT-ul undeva în timpul procesului.
În această postare, voi introduce o abordare diferită, folosind funcția de trecere secretă a docker build. Să mergem.
Folosesc un exemplu de depozit demonstrativ în acest scop, atunci când îl implementați, puteți utiliza propriul dvs. repo.
Abordarea se aplică atât pentru gitlab.com, cât și pentru github.com.
Pasul 1: adăugați o cheie ssh la contul github
Urmați această postare pentru a genera și adăuga cheia ssh la contul dvs. github, iar acest cont github ar trebui să conțină depozitul privat pentru a accesa din Dockerfile.
Să presupunem că fișierul local cheie ssh este la ~/.ssh/id_rsa_github
.
Pentru mai multe informații, consultați acest link.
Pasul 2: adăugați cheia ssh la agentul ssh
Utilizați următoarea comandă
1 2 |
eval $(ssh-agent) ssh-add ~/.ssh/id_rsa_github # replace this ssh key file with your own file |
Pasul 3: utilizați –mount=type=ssh în Dockerfile pentru a accesa cheia ssh adăugată
Să presupunem că ai un RUN
comandă care trebuie să instaleze pachetul R dintr-un depozit privat în contul Github menționat mai sus, puteți utiliza următoarea comandă:
1 2 3 4 5 6 |
# add the repo host to know_hosts, only run once RUN mkdir -p -m 0700 ~/.ssh && ssh-keyscan github.com >> ~/.ssh/known_hosts # the command need accessing the private repo RUN --mount=type=ssh,id=github R -e "install.packages('remotes'); remotes::install_git('(email protected):fortune9/r-package.git@tag-1')" && rm -rf /tmp/* |
Rețineți că folosim funcția remotes::install_git()
pentru a instala pachetul R, adresa URL trebuie să fie în format compatibil ssh și, în plus, am specificat o anumită versiune de etichetă tag-1
a instala. Nu este nevoie să furnizați PAT funcției deloc.
Salvați Dockerfile
. Rețineți, adăugați de asemenea # syntax=docker/dockerfile:1
ca prima linie în Dockerfile.
Pasul 4: construiți imaginea
1 |
docker buildx build --ssh github=$SSH_AUTH_SOCK -f Dockerfile . |
Rețineți că am folosit github ca id pentru secretul de la pasul 3 și 4, îl puteți schimba în orice server git, atâta timp cât folosiți aceeași valoare tot timpul.
Sper că acest lucru vă va ajuta să construiți o imagine grozavă de docker.
Programare fericită 😄
– /2024/11/02/r-how-to-install-r-package-from-a-private-git-repo-in-dockerfile/ –