-
Notifications
You must be signed in to change notification settings - Fork 82
/
Copy pathdm-docker.sh
116 lines (97 loc) · 4.8 KB
/
dm-docker.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#!/bin/bash
# Функция для проверки наличия Docker
check_docker() {
if command -v docker >/dev/null 2>&1; then
echo "Docker уже установлен. Версия: $(docker --version)"
return 0 # Docker установлен
else
echo "Docker не найден. Устанавливаем Docker..."
return 1 # Docker не установлен
fi
}
# Проверяем и устанавливаем Docker, если его нет
if ! check_docker; then
echo "Обновляем список пакетов и устанавливаем необходимые компоненты..."
apt update && apt install -y git curl
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh
rm get-docker.sh # Удаляем установочный скрипт после установки
fi
# Клонируем репозиторий, если его нет
if [ ! -d "./DomainMapper" ]; then
echo "Клонируем репозиторий DomainMapper..."
git clone https://github.com/Ground-Zerro/DomainMapper.git
else
echo "Репозиторий DomainMapper уже клонирован."
fi
# Проверяем наличие Docker образа
if ! docker image inspect domainmapper >/dev/null 2>&1; then
echo "Docker образ не найден. Собираем новый образ..."
echo "Устанавливаем только необходимые для работы компоненты..."
apt update && apt install -y software-properties-common wget build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev \
liblzma-dev tzdata && \
rm -rf /var/lib/apt/lists/*
# Создаём Dockerfile с исправлениями
echo "Создаём Dockerfile..."
cat > Dockerfile <<EOL
FROM ubuntu:jammy
# Устанавливаем необходимые пакеты для сборки Python
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Etc/UTC
RUN apt-get update && \
apt-get install -y wget build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev tzdata && \
ln -fs /usr/share/zoneinfo/\$TZ /etc/localtime && \
echo \$TZ > /etc/timezone && \
dpkg-reconfigure --frontend noninteractive tzdata && \
rm -rf /var/lib/apt/lists/*
# Скачиваем и устанавливаем Python 3.12
RUN wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz && \
tar -xvf Python-3.12.0.tgz && \
cd Python-3.12.0 && \
./configure --enable-optimizations && \
make -j$(nproc) && \
make altinstall && \
cd .. && \
rm -rf Python-3.12.0 Python-3.12.0.tgz
# Устанавливаем pip для Python 3.12
RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.12
WORKDIR /app
ADD ./DomainMapper /app
# Устанавливаем зависимости проекта, если они указаны
RUN if [ -f "requirements.txt" ]; then \
python3.12 -m pip install --upgrade pip && \
python3.12 -m pip install -r requirements.txt; \
fi
CMD ["python3.12", "main.py"]
EOL
# Создаём файл domain-ip-resolve.txt, если его нет
if [ ! -f "./domain-ip-resolve.txt" ]; then
echo "Создаём файл domain-ip-resolve.txt..."
touch domain-ip-resolve.txt
echo "Файл domain-ip-resolve.txt создан."
else
echo "Файл domain-ip-resolve.txt уже существует."
fi
# Собираем Docker образ
echo "Собираем Docker образ..."
docker build -t domainmapper .
# Очищаем кеш Docker после сборки
echo "Очищаем build cache Docker..."
docker builder prune -f
else
echo "Docker образ domainmapper уже существует."
fi
# Проверяем наличие контейнера и запускаем main.py из существующего контейнера
if docker ps -a | grep -q domainmapper_container; then
echo "Контейнер уже существует. Запускаем main.py..."
docker start -i domainmapper_container
else
echo "Создаем и запускаем новый контейнер..."
docker run --name domainmapper_container -v "$(pwd)/domain-ip-resolve.txt:/app/domain-ip-resolve.txt" -it domainmapper
fi
# Сообщаем пользователю о местонахождении файла
echo "Контейнер завершил работу. Файл domain-ip-resolve.txt находится в $(pwd)/domain-ip-resolve.txt"
# Удаляем скрипт после выполнения
echo "Скрипт завершен."
rm -- "$0"