Last active 1752386953

A versatile, stable and fully automated script to install Docker on Ubuntu.

urocibg revised this gist 1752386953. Go to revision

1 file changed, 198 insertions

install-docker.sh(file created)

@@ -0,0 +1,198 @@
1 + #!/bin/bash
2 + set -e
3 +
4 + # Оптимизиран Docker инсталатор за Ubuntu
5 + # Версия: 3.0 - Надежден и пълен с функции
6 + # Автор: Федя Серафиев
7 + # Сайт: https://urocibg.eu
8 + # Дата: $(date +%Y-%m-%d)
9 +
10 + # Конфигурация
11 + CHANNEL="stable"
12 + VERSION=""
13 + DOWNLOAD_URL="https://download.docker.com"
14 + COLOR_GREEN='\033[0;32m'
15 + COLOR_RED='\033[0;31m'
16 + COLOR_RESET='\033[0m'
17 +
18 + # Помощна функция за цветен изход
19 + info() {
20 + echo -e "${COLOR_GREEN}[INFO]${COLOR_RESET} $1"
21 + }
22 +
23 + error() {
24 + echo -e "${COLOR_RED}[ERROR]${COLOR_RESET} $1" >&2
25 + exit 1
26 + }
27 +
28 + # Обработка на параметри
29 + show_help() {
30 + cat <<EOF
31 + Употреба: $0 [опции]
32 +
33 + Опции:
34 + --version VERSION Инсталира конкретна версия на Docker
35 + --channel CHANNEL Избира канал (stable/test) (по подразбиране: stable)
36 + --help Показва този помощен текст
37 +
38 + Примери:
39 + $0 # Инсталира най-новата стабилна версия
40 + $0 --version 24.0 # Инсталира Docker версия 24.0
41 + $0 --channel test # Инсталира от test канала
42 + EOF
43 + exit 0
44 + }
45 +
46 + while [[ $# -gt 0 ]]; do
47 + case $1 in
48 + --version)
49 + VERSION="$2"
50 + shift 2
51 + ;;
52 + --channel)
53 + if [[ "$2" != "stable" && "$2" != "test" ]]; then
54 + error "Невалиден канал. Използвайте 'stable' или 'test'"
55 + fi
56 + CHANNEL="$2"
57 + shift 2
58 + ;;
59 + --help)
60 + show_help
61 + ;;
62 + *)
63 + error "Неизвестен параметър: $1\nИзползвайте --help за помощ"
64 + ;;
65 + esac
66 + done
67 +
68 + # Проверка за root права
69 + if [[ $EUID -ne 0 ]]; then
70 + error "Този скрипт трябва да се изпълнява с root права или чрез sudo"
71 + fi
72 +
73 + # Проверка за Ubuntu
74 + if ! grep -q "ubuntu" /etc/os-release 2>/dev/null; then
75 + error "Този скрипт е предназначен само за Ubuntu системи"
76 + fi
77 +
78 + # Получаване на версията на Ubuntu
79 + UBUNTU_VERSION=$(grep -oP 'VERSION_CODENAME=\K\w+' /etc/os-release 2>/dev/null || lsb_release -cs 2>/dev/null)
80 +
81 + if [[ -z "$UBUNTU_VERSION" ]]; then
82 + error "Не може да се определи версията на Ubuntu"
83 + fi
84 +
85 + info "🐳 Започва инсталация на Docker Engine за Ubuntu $UBUNTU_VERSION ($CHANNEL канал)"
86 +
87 + # Проверка за вече инсталиран Docker
88 + if command -v docker &>/dev/null; then
89 + info "ℹ️ Docker вече е инсталиран. Ще бъде актуализиран..."
90 + sleep 2
91 + fi
92 +
93 + # Премахване на стари версии
94 + info "🧹 Премахване на стари Docker пакети (ако има такива)..."
95 + {
96 + apt-get remove -y docker docker-engine docker.io containerd runc || true
97 + apt-get purge -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin || true
98 + } >/dev/null 2>&1
99 +
100 + # Актуализиране на системата
101 + info "🔄 Актуализиране на списъка с пакети..."
102 + apt-get update -qq >/dev/null
103 +
104 + # Инсталиране на зависимости
105 + info "📦 Инсталиране на необходимите зависимости..."
106 + apt-get install -y -qq \
107 + ca-certificates \
108 + curl \
109 + gnupg \
110 + lsb-release \
111 + software-properties-common \
112 + apt-transport-https >/dev/null
113 +
114 + # Добавяне на Docker GPG ключ
115 + info "🔑 Добавяне на официалния Docker GPG ключ..."
116 + mkdir -p /etc/apt/keyrings
117 + curl -fsSL "$DOWNLOAD_URL/linux/ubuntu/gpg" | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
118 + chmod a+r /etc/apt/keyrings/docker.gpg
119 +
120 + # Добавяне на Docker хранилище
121 + info "📥 Добавяне на Docker хранилище за Ubuntu $UBUNTU_VERSION..."
122 + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $DOWNLOAD_URL/linux/ubuntu $UBUNTU_VERSION $CHANNEL" | \
123 + tee /etc/apt/sources.list.d/docker.list >/dev/null
124 +
125 + # Актуализиране на пакетния индекс
126 + info "🔄 Актуализиране на списъка с пакети след добавяне на Docker хранилището..."
127 + apt-get update -qq >/dev/null
128 +
129 + # Определяне на пакетите за инсталиране
130 + PACKAGES="docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
131 +
132 + # Ако е зададена конкретна версия
133 + if [[ -n "$VERSION" ]]; then
134 + info "🔍 Търсене на Docker версия $VERSION..."
135 + PKG_VERSION=$(apt-cache madison docker-ce | awk -F"|" '{print $2}' | grep "$VERSION" | tr -d ' ' | head -1)
136 +
137 + if [[ -z "$PKG_VERSION" ]]; then
138 + error "Версия $VERSION не е намерена в хранилището!\nНалични версии:\n$(apt-cache madison docker-ce | head -10)"
139 + fi
140 +
141 + PACKAGES="docker-ce=$PKG_VERSION docker-ce-cli=$PKG_VERSION containerd.io docker-buildx-plugin docker-compose-plugin"
142 + info "🎯 Ще бъде инсталирана версия $PKG_VERSION"
143 + fi
144 +
145 + # Инсталиране на Docker
146 + info "🚀 Инсталиране на Docker..."
147 + export DEBIAN_FRONTEND=noninteractive
148 + apt-get install -y -qq $PACKAGES >/dev/null
149 +
150 + # Стартиране и активиране на Docker услугата
151 + info "⚙️ Конфигуриране на Docker услугата..."
152 + systemctl enable --now docker >/dev/null 2>&1
153 +
154 + # Проверка на инсталацията
155 + DOCKER_VERSION=$(docker --version 2>/dev/null || true)
156 + if [[ -z "$DOCKER_VERSION" ]]; then
157 + error "Docker не е инсталиран успешно"
158 + else
159 + info "✅ $DOCKER_VERSION е инсталиран успешно"
160 + fi
161 +
162 + # Тестване с hello-world
163 + info "🧪 Тестване на Docker инсталацията..."
164 + if docker run --rm hello-world >/dev/null 2>&1; then
165 + info "🎉 Docker работи правилно!"
166 + else
167 + error "Docker инсталацията има проблеми"
168 + fi
169 +
170 + # Добавяне на потребителя в docker групата
171 + CURRENT_USER=${SUDO_USER:-$(whoami)}
172 + if ! id -nG "$CURRENT_USER" | grep -qw "docker"; then
173 + info "👥 Добавяне на потребител '$CURRENT_USER' към docker групата..."
174 + usermod -aG docker "$CURRENT_USER"
175 + info "ℹ️ За да влязат промените в сила, изпълнете:\n ${COLOR_GREEN}newgrp docker${COLOR_RESET}\nили излезте от системата и влезте отново"
176 + fi
177 +
178 + # Показване на полезни команди
179 + cat <<EOF
180 +
181 + ${COLOR_GREEN}🎉 Docker е успешно инсталиран и конфигуриран!${COLOR_RESET}
182 +
183 + 📝 Полезни команди:
184 + docker --version # Проверка на версията
185 + docker info # Информация за Docker
186 + docker run hello-world # Тестване
187 + docker ps # Списък на работещите контейнери
188 + docker ps -a # Списък на всички контейнери
189 + docker images # Списък на изображенията
190 + docker exec -it <container> bash # Влизане в контейнер
191 +
192 + 🔧 Управление на услугата:
193 + sudo systemctl start docker # Стартиране на Docker
194 + sudo systemctl stop docker # Спиране на Docker
195 + sudo systemctl restart docker # Рестартиране на Docker
196 +
197 + ℹ️ За повече информация посетете: https://docs.docker.com
198 + EOF
Newer Older