субота, 26 жовтня 2024 р.

Встановлення Git в Docker контейнері

 Задача

Нам всім потрібно час від часу зберігати свої власні напрацювання у вигляді конфігурацій, скриптів та і взагалі будь-яких своїх know-how, щоб у разі, якщо виникає задача, яку вже доводилося вирішувати, не намагатися напружено згадати, як воно було “того разу”, чи черговий раз шукати рішення в Інтернеті. Система керування версіями – Version Control System (VCS), є для цього практично ідеальним інструментом.

На сьогодні вибором VCS в 90% випадків є Git. Функціональність, зручність, поширеність і наявність доступних хмарних сервісів типу GitHub, GitLab, Bitbucket, та інших, як правило, є вирішальними факторами на користь Git. 

Встановлення git на Linux взагалі не становить суттєвої проблеми, наприклад, на Ubuntu достатньо виконання команд:

sudo apt update

sudo apt install git

Але я намагаюся встановлювати додаткову функціональність на своєму Virtual Private Server (VPS) на хостінгу, на своїх Linux робочих станціях і віртуальних машинах з максимальним використанням Docker контейнерів. Не буду поринати в доведення переваг такого підходу, головне те, що мені так цікавіше 🙂

Отже задача полягає у встановленні на сервер з Ubuntu 22.04 git у вигляді Docker контейнера. Потрібний для цього Docker Engine було встановлено раніше.

Інформаційний пошук

Шукаємо Docker образ на Docker Hub. По моделі git знаходимо низку образів, серед яких чільні місця з популярності і кількості завантажень займають alpine/git і bitnami/git.

alpine/git – простий git в середовищі Alpine Linux, яке забезпечує створення максимально компактних Docker образів.

bitnami/git – git в середовищі Minideb – адаптованої версії Debian Linux для побудови образів, від відомого розробника образів Bitnami (зараз є частиною VMWare, яка в свою чергу належить Broadcom). Серед Docker образів, які надає Bitnami: bitname/nginx, bitnami/wordpress, bitnami/mariadb і багато інших (пошук на Docker Hub по моделі bitnami дав 2 228 результатів).

В даному випадку мені потрібний саме простий компактний git з базовою функціональністю, відтак мій вибір – alpine/git

Насправді, я спробував обидва варіанти. bitnami/git роздратував об’ємом рекламного тексту, який з’являвся на екрані при кожному запуску. Думаю, що цього можна позбутися – перезібрати образ самотужки за допомогою Dockerfile, який наводиться, знайти і відредагувати entrypoint файл, чи щось подібне. Можливо, колись і це зроблю, але наразі alpine/git мене цілком влаштовує. 

Встановлення Git і налаштування для використання

Встановлення останньої (latest) версії Docker образу alpine/git:

chd@REBEL:~$ docker pull alpine/git

Using default tag: latest

latest: Pulling from alpine/git

43c4264eed91: Pull complete 

d376ed7606d9: Pull complete 

117123371baa: Pull complete 

Digest: sha256:888261e21bc4577e464d996f20cbf8eb8b0fa787491f62757530e4db46720d8b

Status: Downloaded newer image for alpine/git:latest

docker.io/alpine/git:latest


chd@REBEL:~$ docker images

REPOSITORY   TAG       IMAGE ID       CREATED       SIZE

alpine/git   latest    9fd7c1f96ff3   2 weeks ago   89.5MB


Перевірка працездатності git контейнера – відображення версії git:


chd@REBEL:~$ docker run -it --rm --name git alpine/git version

git version 2.45.2


Очевидно, що git працездатний, інформацію про версію ми отримали – 2.45.2.


Для зручності використання додамо наступний вміст до файлу ~/.bash_profile (якщо цей файл відсутній, можна його створити, або натомість додати вміст до файлу ~/.profile):


function git () {

    (docker run -ti --rm -v ${HOME}:/root -v $(pwd):/git alpine/git "$@")

}


Відтак після входу в систему нам буде доступна команда git, яка буде запускати git контейнер.

Для того, щоб не виходити з поточної оболонки і вже актуалізувати команду git, виконуємо команду:

chd@REBEL:~$ source ~/.bash_profile

Перевіряємо нову команду:

chd@REBEL:~$ git version

git version 2.45.2


Для подальшого тестування можемо склонувати з GitHub репозиторій doctorchd/doctorvirt:

chd@REBEL:~$ mkdir git

chd@REBEL:~$ cd git

chd@REBEL:~/git$ git clone https://github.com/doctorchd/doctorvirt.git

Cloning into 'doctorvirt'...

remote: Enumerating objects: 3, done.

remote: Counting objects: 100% (3/3), done.

remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)

Receiving objects: 100% (3/3), done.


chd@REBEL:~/git$ cd doctorvirt

chd@REBEL:~/git/doctorvirt$ git status

On branch main

Your branch is up to date with 'origin/main'.


nothing to commit, working tree clean

Посилання

Немає коментарів:

Дописати коментар