Czasami zachodzi potrzeba przeniesienia obrazu kontenera Dockerowego z jednego repozytorium do jakiegoś innego. Może to być spowodowane przez to, że nasze usługi są zintegrowane z konkretnym dostawcą i potrzebują mieć obraz w tym konkretnym repozytorium. Czasem chcemy pobrać obraz z publicznego repo, przetestować go, doinstalować jakieś pakiety, zmodyfikować konfigurację i wrzucić do prywatnego repozytorium gdzie trzymamy tylko whitelistowane obrazy. Możemy tego dokonać w kilku prostych krokach.
Logowanie do prywatnego repozytorium
Na początku trzeba się zalogować do prywatnego repozytorium, do którego będziemy wrzucać obrazek. Przykładowo dla Amazonowego ECR wykonujemy komendę:
eval `aws ecr get-login --no-include-email --profile=twoj-wybrany-profil --region=us-east-1`
Normalnie komenda aws ecr get-login zwraca polecenie dockera, wraz z parametrami takimi jak username, token i host, pozwalającymi się zalogować. Dodanie eval na początku powoduje, że polecenie od razu się wykona i nie trzeba go kopiować. Po tym kroku jesteśmy zalogowani do repozytorium ECR.
Pobranie obrazu źródłowego
Kolejnym krokiem jest pobranie wybranego obrazu z repozytorium źródłowego. Robimy to zwykłą komendą pull. Powiedzmy, że chcemy pobrać ostatnią wersję LTS obrazu Ubuntu z publicznego repozytorium Docker Hub.
docker pull ubuntu:latest
Jeśli chcemy pobrać obraz z innego repozytorium, podajemy jego adres, nazwę obrazu i wersję w taki sposób (przykładowo dla Amazona):
docker pull repoid.dkr.ecr.us-east-1.amazonaws.com/nazwa-obrazu:wersja
Zmiana tagów obrazu i wypchnięcie go do naszego repozytorium
Teraz pozostały nam dwa kroki do wykonania. Najpierw tagujemy pobrany obraz adresem nowego repozytorium nazwą i wersją, pod którą ma być widoczny:
docker tag ubuntu:latest repoid.dkr.ecr.us-east-1.amazonaws.com/nazwa-obrazu:wersja
Ostatnim krokiem jest wepchnięcie obrazu do nowego repozytorium. Używamy standardowej komendy push, używając nowo nadanego tagu.
docker push repoid.dkr.ecr.us-east-1.amazonaws.com/nazwa-obrazu:wersja
I to wszystko. Obraz jest już w naszym repozytorium, możemy z niego korzystać, pobierając go i używając komendy docker pull oraz nowego tagu.