Задача
Нам всім потрібно час від часу зберігати свої власні напрацювання у вигляді конфігурацій, скриптів та і взагалі будь-яких своїх 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
Немає коментарів:
Дописати коментар