urocibg revised this gist . 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