Перейти к основному содержимому
Вернуться в категорию

Руководство по Docker: Установка и основные команды

Полное руководство по Docker: установка, основные команды (run, stop, rm, ps), управление образами, тома и основы сети на Linux-серверах.

Время чтения: 14 мин Управление сервером
dockerконтейнеробразтомсетьlinuxdevopsdocker hub

Содержание

Руководство по Docker: Установка и основные команды

Docker — это платформа с открытым исходным кодом для запуска приложений в изолированных контейнерах. Она обеспечивает единообразную среду от разработки до производства. В этом руководстве рассматриваются установка Docker, основные команды и практические сценарии использования.

Что такое Docker?

Docker упаковывает приложения и их зависимости в переносимые контейнеры. В отличие от виртуальных машин:

  • Использует ядро хост-ОС (намного легче)
  • Запускается и останавливается за секунды
  • Потребляет значительно меньше ресурсов
  • Устраняет проблему «у меня работает»

Docker — краеугольный камень современной разработки и развёртывания ПО. На серверах REXE вы можете легко развёртывать приложения с помощью Docker.

Установка Docker

Debian/Ubuntu

hljs bash
# Удаление старых версий
sudo apt remove docker docker-engine docker.io containerd runc

# Установка зависимостей
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release -y

# Добавление GPG-ключа Docker
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Добавление репозитория Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Установка Docker
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

# Запуск и включение службы
sudo systemctl start docker
sudo systemctl enable docker

RHEL/CentOS/AlmaLinux

hljs bash
# Добавление репозитория Docker
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Установка Docker
sudo dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

# Запуск службы
sudo systemctl start docker
sudo systemctl enable docker

Проверка установки

hljs bash
# Проверка версии Docker
docker --version

# Запуск тестового контейнера
sudo docker run hello-world

# Использование Docker без sudo
sudo usermod -aG docker $USER
newgrp docker

Основные команды Docker

Запуск контейнеров

hljs bash
# Простой запуск контейнера
docker run nginx

# Запуск в фоне (detached)
docker run -d nginx

# С перенаправлением портов
docker run -d -p 8080:80 nginx

# С именем
docker run -d --name web-server -p 8080:80 nginx

# С переменной окружения
docker run -d -e MYSQL_ROOT_PASSWORD=secret --name mysql mysql:8.0

# С монтированием тома
docker run -d -v /host/dir:/container/dir nginx

# Политика автоматического перезапуска
docker run -d --restart unless-stopped nginx

# Интерактивный терминал
docker run -it ubuntu bash

Управление контейнерами

hljs bash
# Список запущенных контейнеров
docker ps

# Список всех контейнеров (включая остановленные)
docker ps -a

# Остановить контейнер
docker stop имя_контейнера

# Запустить контейнер
docker start имя_контейнера

# Перезапустить контейнер
docker restart имя_контейнера

# Удалить контейнер (должен быть остановлен)
docker rm имя_контейнера

# Принудительно удалить запущенный контейнер
docker rm -f имя_контейнера

# Удалить все остановленные контейнеры
docker container prune

Мониторинг контейнеров

hljs bash
# Просмотр логов контейнера
docker logs имя_контейнера

# Следить за логами в реальном времени
docker logs -f имя_контейнера

# Последние 100 строк логов
docker logs --tail 100 имя_контейнера

# Использование ресурсов
docker stats

# Детали контейнера
docker inspect имя_контейнера

# Подключиться к оболочке контейнера
docker exec -it имя_контейнера bash

# Выполнить команду в контейнере
docker exec имя_контейнера ls /var/www

Управление образами

hljs bash
# Загрузить образ
docker pull nginx
docker pull nginx:1.25
docker pull ubuntu:22.04

# Список локальных образов
docker images

# Удалить образ
docker rmi nginx

# Удалить неиспользуемые образы
docker image prune

# Очистить все неиспользуемые ресурсы
docker system prune -a

Создание образов с Dockerfile

hljs dockerfile
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./
RUN npm install --production

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]
hljs bash
# Создать образ
docker build -t myapp:1.0 .

# Отправить на Docker Hub
docker tag myapp:1.0 username/myapp:1.0
docker push username/myapp:1.0

Управление томами

Тома обеспечивают сохранность данных даже после удаления контейнеров.

hljs bash
# Создать том
docker volume create database-data

# Список томов
docker volume ls

# Подключить том к контейнеру
docker run -d -v database-data:/var/lib/mysql mysql:8.0

# Bind mount (директория хоста)
docker run -d -v /root/data:/app/data nginx

# Удалить том
docker volume rm database-data

# Удалить неиспользуемые тома
docker volume prune

Основы сети

hljs bash
# Список сетей
docker network ls

# Создать пользовательскую сеть
docker network create app-network

# Подключить контейнеры к сети
docker run -d --network app-network --name web nginx
docker run -d --network app-network --name db mysql:8.0

# Контейнеры в одной сети могут обращаться друг к другу по имени
# Из контейнера web: ping db

# Детали сети
docker network inspect app-network

Практические примеры

Веб-сервер Nginx

hljs bash
docker run -d \
  --name nginx-web \
  -p 80:80 \
  -v /var/www/html:/usr/share/nginx/html:ro \
  --restart unless-stopped \
  nginx:alpine

База данных MySQL

hljs bash
docker run -d \
  --name mysql-db \
  -e MYSQL_ROOT_PASSWORD=strong_password \
  -e MYSQL_DATABASE=myapp \
  -v mysql-data:/var/lib/mysql \
  -p 3306:3306 \
  --restart unless-stopped \
  mysql:8.0

Для управления несколькими контейнерами используйте Docker Compose. Файл docker-compose.yml позволяет запустить все сервисы одной командой.

Заключение

Docker — незаменимый инструмент для современного развёртывания приложений. Освоив основы, переходите к Docker Compose для управления несколькими сервисами. На серверах REXE Docker позволяет запускать приложения изолированно, безопасно и переносимо.