Files
scripts/service/docker/install-docker

80 lines
2.5 KiB
Plaintext
Raw Normal View History

2026-01-12 01:03:54 +04:00
#!/usr/bin/perl
use strict;
use warnings;
use autodie;
print "Установка Docker...\n";
# Функция для выполнения системных команд
sub run_cmd {
my $cmd = shift;
print "Выполняется: $cmd\n";
system($cmd) == 0 or die "Ошибка выполнения команды: $cmd\n";
}
# Функция для получения версии Ubuntu
sub get_ubuntu_codename {
my $codename;
# Читаем файл /etc/os-release
if (open my $fh, '<', '/etc/os-release') {
while (my $line = <$fh>) {
if ($line =~ /^UBUNTU_CODENAME=([^\s]+)/) {
$codename = $1;
last;
} elsif ($line =~ /^VERSION_CODENAME=([^\s]+)/ && !defined $codename) {
$codename = $1;
}
}
close $fh;
}
die "Не удалось определить версию Ubuntu\n" unless defined $codename;
return $codename;
}
# Обновление пакетов и установка зависимостей
run_cmd('sudo apt update');
run_cmd('sudo apt install -y ca-certificates curl');
# Создание директории для ключей
run_cmd('sudo install -m 0755 -d /etc/apt/keyrings');
# Загрузка GPG ключа Docker
run_cmd('sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc');
run_cmd('sudo chmod a+r /etc/apt/keyrings/docker.asc');
# Добавление репозитория Docker
my $ubuntu_codename = get_ubuntu_codename();
print "Определена версия Ubuntu: $ubuntu_codename\n";
my $sources_content = <<"EOF";
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $ubuntu_codename
Components: stable
Signed-By: /etc/apt/keyrings/docker.asc
EOF
# Записываем содержимое в файл
open my $fh, '>', '/tmp/docker.sources';
print $fh $sources_content;
close $fh;
run_cmd('sudo cp /tmp/docker.sources /etc/apt/sources.list.d/docker.sources');
run_cmd('sudo rm -f /tmp/docker.sources');
# Обновление списка пакетов
run_cmd('sudo apt update');
# Установка Docker
run_cmd('sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin');
print "\nУстановка Docker завершена успешно!\n";
print "Проверка версии Docker:\n";
system('sudo docker --version');
print "\nПроверка работы Docker:\n";
system('sudo docker run hello-world');