Перед установкой нового Docker необходимо удалить любые старые или конфликтующие пакеты, если они есть. Это не удалит ваши данные, если Docker уже был установлен.
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Шаг 2: Установка зависимостей и добавление репозитория
Установите утилиты для управления репозиториями и добавьте официальный репозиторий Docker. Это позволит вам устанавливать и обновлять Docker через стандартный менеджер пакетов.
Устанавливаем пакет для управления репозиториями
sudo dnf -y install dnf-plugins-core
Добавляем официальный репозиторий Docker
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Шаг 3: Установка Docker Engine
Теперь можно установить сам Docker и все необходимые компоненты. Если вы хотите установить последнюю версию, выполните эту команду. Во время установки система может запросить подтверждение GPG-ключа — убедитесь, что его отпечаток совпадает с указанным в официальной документации, и подтвердите установку.
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Шаг 4: Запуск Docker и настройка автозагрузки
После установки Docker необходимо запустить и добавить в автозагрузку, чтобы он стартовал при каждом включении сервера.
Запускаем Docker
sudo systemctl start docker
Добавляем в автозагрузку
sudo systemctl enable docker
Остановили сервисы:
systemctl stop docker
systemctl stop containerd
Удалили старые пакеты:
dnf remove -y \
docker-ce \
docker-ce-cli \
docker-buildx-plugin \
docker-compose-plugin \
containerd.io
Удалили остатки данных:
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Проверили, что Docker полностью удалён:
rpm -qa | grep -E 'docker|containerd'
Вывод должен быть пустым.
Проверили наличие репозитория:
dnf repolist | grep -i docker
Если репозиторий отсутствует:
dnf install -y dnf-plugins-core
dnf config-manager --add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Установили актуальные версии Docker CE для EL10:
dnf install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
Проверили установленные пакеты:
rpm -qa | grep -E 'docker|containerd'
docker inspect --format '{{ .State.Pid }}' ba73931cc7b4
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}' $(docker ps -q) | sed 's/\///g'
docker system prune
docker exec -it <имя_контейнера или его id> /bin/bash
docker exec -it <имя_контейнера или его id> sh
docker exec -it <имя_контейнера или его id> powershell
Получает имена всех сервисов в Docker Swarm.
Проходит по каждому из них.
Принудительно обновляет (перезапускает) каждый сервис.
docker service ls --format '{{.Name}}' | xargs -n1 docker service update --force
sudo docker build -t zenbody-backend .
sudo docker run -p 8000:8000 zenbody-backend
в фоне
sudo docker run -d -p 8000:8000 zenbody-backend
Docker (для удобного деплоя)
zenbody/
├─ frontend/
│ ├─ Dockerfile
│ ├─ package.json
│ ├─ public/
│ └─ src/
├─ backend/
│ ├─ Dockerfile
│ ├─ requirements.txt
│ └─ app.py
├─ docker-compose.yml
├─ .github/
│ └─ workflows/
│ └─ deploy.yml
└─ README.md
Соберём два контейнера:
frontend (React → статические файлы, будет собираться и отдаваться Nginx).
backend (FastAPI + Uvicorn).
version: "3.9"
services:
backend:
build: ./backend
container_name: calorie-backend
ports:
- "8000:8000"
environment:
- PYTHONUNBUFFERED=1
restart: always
frontend:
build: ./frontend
container_name: calorie-frontend
ports:
- "80:80"
restart: always
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
# build stage
FROM node:18 AS build
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm install
COPY . .
RUN npm run build
# production stage
FROM nginx:stable-alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Запуск бэка и фронта с помощью композа
docker compose up --build -d
docker cp 1893c8e32eac:/tmp/mongo.tgz /data/tmp/data
1893c8e32eac:/tmp/mongo.tgz - id контейнера и путь до файла
/data/tmp/data - путь до сервера
docker cp "E:\PAW\backup\backup_2025_10_29_13_32_10\mongo\mongo.zip" a0281234a92c:/
version: '3.8'
services:
mongo:
image: mongo:7
container_name: mongo
restart: always
ports:
- "27017:27017" # 🔥 проброс порта наружу
environment:
MONGO_INITDB_ROOT_USERNAME: admin
MONGO_INITDB_ROOT_PASSWORD: secret
volumes:
- mongo_data:/data/db # 💾 чтобы данные сохранялись между перезапусками
volumes:
mongo_data:
Вариант 1: Удалить из отслеживания, но оставить локально (рекомендуется)
bash
Удалить файл из индекса Git (из репозитория), но оставить на диске
git rm --cached docker-compose.yml
Проверить, что файл больше не отслеживается
git ls-files | grep docker-compose.yml # Не должно ничего показывать
Закоммитить изменение
git commit -m "Перестаем отслеживать docker-compose.yml"
Отправить изменения на сервер
git push
Вариант 2: Проверить статус после удаления
bash
Теперь docker-compose.yml должен появиться в списке неотслеживаемых
git status
А в списке игнорируемых?
git status --ignored | grep docker-compose
docker compose down -v
docker system prune -f
docker compose build --no-cache
docker compose up -d
docker compose build --no-cache web-client
docker compose up -d web-client
Останавливаем все
docker compose down -v
Чистим кэш Docker
docker system prune -f
Пересобираем все с нуля
docker compose build --no-cache
Запускаем
docker compose up -d
🔁 Пересоздать без пересборки образов
docker compose up -d --force-recreate
🔧 Пересоздать с пересборкой образов
docker compose up -d --build docker compose build --no-cache #Если нужно установить новые зависимости
🔄 Полное обновление (если есть image: из registry)
docker compose pull
docker compose up -d
💥 Полное удаление контейнеров и зависимостей
Остановить и удалить всё:
docker compose down
Остановить + удалить контейнеры + сети + тома:
docker compose down --volumes --remove-orphans
⚠️ --volumes удалит базы данных внутри контейнерных volume’ов — осторожно!
✅ Настройки в docker-compose.yml
Пример с автоматическим рестартом и зависимостями:
version: "3.9"
services:
backend:
build: ./backend
container_name: backend
restart: always
ports:
- "8000:8000"
depends_on:
- frontend
- db
frontend:
build: ./frontend
container_name: frontend
restart: always
ports:
- "3000:3000"
db:
image: postgres:15
container_name: database
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: appdb
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
⚙️ Чистка лишнего
Удаление всех неиспользуемых контейнеров/образов/томов:
docker system prune -a --volumes
⚠️ Удалит всё, что не используется нигде.
💡 Рекомендуемый рабочий процесс обновления
Если менялись только .env или файлы в build context:
docker compose down
docker compose up -d --build
Если используешь образы из DockerHub (ключ image:):
docker compose pull
docker compose up -d
sudo systemctl stop docker docker.socket
sudo mkdir -p /home/docker
sudo rsync -avxP /var/lib/docker/ /home/docker/
sudo mv /var/lib/docker /var/lib/docker.bak
sudo tee /etc/docker/daemon.json << 'EOF'
{
"data-root": "/home/docker",
"log-driver": "json-file",
"log-opts": {"max-size": "10m", "max-file": "3"}
}
EOF
sudo systemctl daemon-reload
sudo systemctl start docker
docker info | grep "Docker Root Dir" # /home/docker