Установка и настройка Docker — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Установка и настройка Docker = == 1. Подготовка системы == * Войдите в систему под учетной зап…») |
Admin (обсуждение | вклад) |
||
Строка 11: | Строка 11: | ||
1. Обновите список пакетов: | 1. Обновите список пакетов: | ||
− | <code> | + | <code>sudo apt update</code> |
− | sudo apt update | ||
− | </code> | ||
2. Установите необходимые пакеты: | 2. Установите необходимые пакеты: | ||
− | <code> | + | <code>sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release</code> |
− | sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release | ||
− | </code> | ||
3. Добавьте официальный GPG ключ Docker: | 3. Добавьте официальный GPG ключ Docker: | ||
− | <code> | + | <code>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg</code> |
− | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg | ||
− | </code> | ||
4. Добавьте репозиторий Docker: | 4. Добавьте репозиторий Docker: | ||
− | <code> | + | <code>echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null</code> |
− | echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null | ||
− | </code> | ||
5. Обновите список пакетов: | 5. Обновите список пакетов: | ||
− | <code> | + | <code>sudo apt update</code> |
− | sudo apt update | ||
− | </code> | ||
6. Установите Docker: | 6. Установите Docker: | ||
− | <code> | + | <code>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</code> |
− | sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin | ||
− | </code> | ||
=== Установка через snap === | === Установка через snap === | ||
1. Установите Docker через snap: | 1. Установите Docker через snap: | ||
− | <code> | + | <code>sudo snap install docker</code> |
− | sudo snap install docker | ||
− | </code> | ||
2. Добавьте пользователя в группу docker: | 2. Добавьте пользователя в группу docker: | ||
− | <code> | + | <code>sudo usermod -aG docker $USER</code> |
− | sudo usermod -aG docker $USER | ||
− | </code> | ||
== 3. Настройка Docker === | == 3. Настройка Docker === | ||
Строка 57: | Строка 41: | ||
1. Запустите Docker: | 1. Запустите Docker: | ||
− | <code> | + | <code>sudo systemctl start docker</code> |
− | sudo systemctl start docker | ||
− | </code> | ||
2. Включите автозапуск: | 2. Включите автозапуск: | ||
− | <code> | + | <code>sudo systemctl enable docker</code> |
− | sudo systemctl enable docker | ||
− | </code> | ||
3. Проверьте статус: | 3. Проверьте статус: | ||
− | <code> | + | <code>sudo systemctl status docker</code> |
− | sudo systemctl status docker | ||
− | </code> | ||
=== Настройка пользователей === | === Настройка пользователей === | ||
1. Добавьте пользователя в группу docker: | 1. Добавьте пользователя в группу docker: | ||
− | <code> | + | <code>sudo usermod -aG docker $USER</code> |
− | sudo usermod -aG docker $USER | ||
− | </code> | ||
2. Перезагрузите сессию или выполните: | 2. Перезагрузите сессию или выполните: | ||
− | <code> | + | <code>newgrp docker</code> |
− | newgrp docker | ||
− | </code> | ||
3. Проверьте права: | 3. Проверьте права: | ||
− | <code> | + | <code>docker run hello-world</code> |
− | docker run hello-world | ||
− | </code> | ||
== 4. Основы работы с Docker === | == 4. Основы работы с Docker === | ||
Строка 93: | Строка 65: | ||
1. '''Просмотр информации о Docker''': | 1. '''Просмотр информации о Docker''': | ||
− | <code> | + | <code>docker --version</code> |
− | docker --version | + | <code>docker info</code> |
− | docker info | ||
− | </code> | ||
2. '''Просмотр образов''': | 2. '''Просмотр образов''': | ||
− | <code> | + | <code>docker images</code> |
− | docker images | ||
− | </code> | ||
3. '''Просмотр контейнеров''': | 3. '''Просмотр контейнеров''': | ||
− | <code> | + | <code>docker ps</code> |
− | docker ps | + | <code>docker ps -a</code> |
− | docker ps -a | ||
− | </code> | ||
4. '''Просмотр всех ресурсов''': | 4. '''Просмотр всех ресурсов''': | ||
− | <code> | + | <code>docker system df</code> |
− | docker system df | ||
− | </code> | ||
=== Работа с образами === | === Работа с образами === | ||
1. '''Скачивание образа''': | 1. '''Скачивание образа''': | ||
− | <code> | + | <code>docker pull nginx</code> |
− | docker pull nginx | + | <code>docker pull ubuntu:20.04</code> |
− | docker pull ubuntu:20.04 | ||
− | </code> | ||
2. '''Поиск образов''': | 2. '''Поиск образов''': | ||
− | <code> | + | <code>docker search nginx</code> |
− | docker search nginx | ||
− | </code> | ||
3. '''Удаление образа''': | 3. '''Удаление образа''': | ||
− | <code> | + | <code>docker rmi nginx</code> |
− | docker rmi nginx | + | <code>docker rmi $(docker images -q)</code> |
− | docker rmi $(docker images -q) | ||
− | </code> | ||
=== Работа с контейнерами === | === Работа с контейнерами === | ||
1. '''Запуск контейнера''': | 1. '''Запуск контейнера''': | ||
− | <code> | + | <code>docker run -d --name my-nginx nginx</code> |
− | docker run -d --name my-nginx nginx | ||
− | </code> | ||
2. '''Запуск с портами''': | 2. '''Запуск с портами''': | ||
− | <code> | + | <code>docker run -d -p 8080:80 --name my-nginx nginx</code> |
− | docker run -d -p 8080:80 --name my-nginx nginx | ||
− | </code> | ||
3. '''Запуск с переменными окружения''': | 3. '''Запуск с переменными окружения''': | ||
− | <code> | + | <code>docker run -d -e MYSQL_ROOT_PASSWORD=password --name my-mysql mysql</code> |
− | docker run -d -e MYSQL_ROOT_PASSWORD=password --name my-mysql mysql | ||
− | </code> | ||
4. '''Остановка контейнера''': | 4. '''Остановка контейнера''': | ||
− | <code> | + | <code>docker stop my-nginx</code> |
− | docker stop my-nginx | ||
− | </code> | ||
5. '''Удаление контейнера''': | 5. '''Удаление контейнера''': | ||
− | <code> | + | <code>docker rm my-nginx</code> |
− | docker rm my-nginx | ||
− | </code> | ||
== 5. Создание Dockerfile === | == 5. Создание Dockerfile === | ||
Строка 165: | Строка 113: | ||
1. Создайте Dockerfile: | 1. Создайте Dockerfile: | ||
− | <code> | + | <code>nano Dockerfile</code> |
− | nano Dockerfile | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>FROM ubuntu:20.04</code> |
− | + | <code>LABEL maintainer="admin@example.com"</code> | |
− | FROM ubuntu:20.04 | + | <code>LABEL description="My custom application"</code> |
− | + | <code>RUN apt update && apt install -y \</code> | |
− | + | <code>nginx \</code> | |
− | LABEL maintainer="admin@example.com" | + | <code>curl \</code> |
− | LABEL description="My custom application" | + | <code>&& rm -rf /var/lib/apt/lists/*</code> |
− | + | <code>COPY index.html /var/www/html/</code> | |
− | + | <code>COPY nginx.conf /etc/nginx/nginx.conf</code> | |
− | RUN apt update && apt install -y \ | + | <code>EXPOSE 80</code> |
− | + | <code>CMD ["nginx", "-g", "daemon off;"]</code> | |
− | |||
− | |||
− | |||
− | |||
− | COPY index.html /var/www/html/ | ||
− | COPY nginx.conf /etc/nginx/nginx.conf | ||
− | |||
− | |||
− | EXPOSE 80 | ||
− | |||
− | |||
− | CMD ["nginx", "-g", "daemon off;"] | ||
− | </code> | ||
=== Создание образа === | === Создание образа === | ||
1. Создайте образ: | 1. Создайте образ: | ||
− | <code> | + | <code>docker build -t my-app:latest .</code> |
− | docker build -t my-app:latest . | ||
− | </code> | ||
2. Создайте образ с тегом: | 2. Создайте образ с тегом: | ||
− | <code> | + | <code>docker build -t my-app:v1.0 .</code> |
− | docker build -t my-app:v1.0 . | ||
− | </code> | ||
3. Запустите контейнер: | 3. Запустите контейнер: | ||
− | <code> | + | <code>docker run -d -p 8080:80 --name my-app-container my-app:latest</code> |
− | docker run -d -p 8080:80 --name my-app-container my-app:latest | ||
− | </code> | ||
== 6. Настройка Docker Compose === | == 6. Настройка Docker Compose === | ||
Строка 217: | Строка 144: | ||
1. Установите Docker Compose: | 1. Установите Docker Compose: | ||
− | <code> | + | <code>sudo apt install docker-compose</code> |
− | sudo apt install docker-compose | ||
− | </code> | ||
2. Проверьте версию: | 2. Проверьте версию: | ||
− | <code> | + | <code>docker-compose --version</code> |
− | docker-compose --version | ||
− | </code> | ||
=== Создание docker-compose.yml === | === Создание docker-compose.yml === | ||
1. Создайте файл конфигурации: | 1. Создайте файл конфигурации: | ||
− | <code> | + | <code>nano docker-compose.yml</code> |
− | nano docker-compose.yml | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>version: '3.8'</code> |
− | version: '3.8' | + | <code>services:</code> |
− | + | <code>web:</code> | |
− | services: | + | <code>image: nginx:latest</code> |
− | + | <code>ports:</code> | |
− | + | <code>- "80:80"</code> | |
− | + | <code>volumes:</code> | |
− | + | <code>- ./html:/usr/share/nginx/html</code> | |
− | + | <code>depends_on:</code> | |
− | + | <code>- app</code> | |
− | + | <code>app:</code> | |
− | + | <code>image: node:16</code> | |
− | + | <code>working_dir: /app</code> | |
− | + | <code>volumes:</code> | |
− | + | <code>- ./app:/app</code> | |
− | + | <code>command: npm start</code> | |
− | + | <code>ports:</code> | |
− | + | <code>- "3000:3000"</code> | |
− | + | <code>database:</code> | |
− | + | <code>image: mysql:8.0</code> | |
− | + | <code>environment:</code> | |
− | + | <code>MYSQL_ROOT_PASSWORD: rootpassword</code> | |
− | + | <code>MYSQL_DATABASE: myapp</code> | |
− | + | <code>MYSQL_USER: user</code> | |
− | + | <code>MYSQL_PASSWORD: password</code> | |
− | + | <code>volumes:</code> | |
− | + | <code>- mysql_data:/var/lib/mysql</code> | |
− | + | <code>ports:</code> | |
− | + | <code>- "3306:3306"</code> | |
− | + | <code>volumes:</code> | |
− | + | <code>mysql_data:</code> | |
− | |||
− | |||
− | |||
− | volumes: | ||
− | |||
− | </code> | ||
=== Управление Docker Compose === | === Управление Docker Compose === | ||
1. '''Запуск сервисов''': | 1. '''Запуск сервисов''': | ||
− | <code> | + | <code>docker-compose up -d</code> |
− | docker-compose up -d | ||
− | </code> | ||
2. '''Остановка сервисов''': | 2. '''Остановка сервисов''': | ||
− | <code> | + | <code>docker-compose down</code> |
− | docker-compose down | ||
− | </code> | ||
3. '''Просмотр логов''': | 3. '''Просмотр логов''': | ||
− | <code> | + | <code>docker-compose logs</code> |
− | docker-compose logs | + | <code>docker-compose logs web</code> |
− | docker-compose logs web | ||
− | </code> | ||
4. '''Перезапуск сервисов''': | 4. '''Перезапуск сервисов''': | ||
− | <code> | + | <code>docker-compose restart</code> |
− | docker-compose restart | ||
− | </code> | ||
== 7. Настройка Docker Registry === | == 7. Настройка Docker Registry === | ||
Строка 300: | Строка 207: | ||
1. Запустите Docker Registry: | 1. Запустите Docker Registry: | ||
− | <code> | + | <code>docker run -d -p 5000:5000 --name registry registry:2</code> |
− | docker run -d -p 5000:5000 --name registry registry:2 | ||
− | </code> | ||
2. Создайте образ для Registry: | 2. Создайте образ для Registry: | ||
− | <code> | + | <code>docker tag my-app:latest localhost:5000/my-app:latest</code> |
− | docker tag my-app:latest localhost:5000/my-app:latest | ||
− | </code> | ||
3. Отправьте образ в Registry: | 3. Отправьте образ в Registry: | ||
− | <code> | + | <code>docker push localhost:5000/my-app:latest</code> |
− | docker push localhost:5000/my-app:latest | ||
− | </code> | ||
=== Настройка аутентификации === | === Настройка аутентификации === | ||
1. Создайте директорию для аутентификации: | 1. Создайте директорию для аутентификации: | ||
− | <code> | + | <code>sudo mkdir -p /auth</code> |
− | sudo mkdir -p /auth | ||
− | </code> | ||
2. Создайте пользователя: | 2. Создайте пользователя: | ||
− | <code> | + | <code>sudo htpasswd -Bbn username password > /auth/htpasswd</code> |
− | sudo htpasswd -Bbn username password > /auth/htpasswd | ||
− | </code> | ||
3. Запустите Registry с аутентификацией: | 3. Запустите Registry с аутентификацией: | ||
− | <code> | + | <code>docker run -d -p 5000:5000 --name registry \</code> |
− | docker run -d -p 5000:5000 --name registry \ | + | <code>-v /auth:/auth \</code> |
− | + | <code>-e "REGISTRY_AUTH=htpasswd" \</code> | |
− | + | <code>-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \</code> | |
− | + | <code>-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \</code> | |
− | + | <code>registry:2</code> | |
− | |||
− | </code> | ||
== 8. Мониторинг Docker === | == 8. Мониторинг Docker === | ||
Строка 341: | Строка 236: | ||
1. Просмотрите статистику контейнеров: | 1. Просмотрите статистику контейнеров: | ||
− | <code> | + | <code>docker stats</code> |
− | docker stats | ||
− | </code> | ||
2. Просмотрите статистику конкретного контейнера: | 2. Просмотрите статистику конкретного контейнера: | ||
− | <code> | + | <code>docker stats my-container</code> |
− | docker stats my-container | ||
− | </code> | ||
3. Просмотрите использование ресурсов: | 3. Просмотрите использование ресурсов: | ||
− | <code> | + | <code>docker system df</code> |
− | docker system df | ||
− | </code> | ||
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | <code> | + | <code>sudo nano /usr/local/bin/docker-monitor.sh</code> |
− | sudo nano /usr/local/bin/docker-monitor.sh | ||
− | </code> | ||
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | <code> | + | <code>echo "=== Docker Monitoring ==="</code> |
− | + | <code>echo "Date: $(date)"</code> | |
− | + | <code>echo ""</code> | |
− | echo "=== Docker Monitoring ===" | + | <code>if systemctl is-active --quiet docker; then</code> |
− | echo "Date: $(date)" | + | <code>echo "Docker is running"</code> |
− | echo "" | + | <code>else</code> |
− | + | <code>echo "Docker is not running"</code> | |
− | + | <code>fi</code> | |
− | if systemctl is-active --quiet docker; then | + | <code>echo "Running containers: $(docker ps -q | wc -l)"</code> |
− | + | <code>echo "Total containers: $(docker ps -aq | wc -l)"</code> | |
− | else | + | <code>echo "Images: $(docker images -q | wc -l)"</code> |
− | + | <code>echo "Disk usage:"</code> | |
− | fi | + | <code>docker system df</code> |
− | + | <code>echo "Top containers by CPU:"</code> | |
− | + | <code>docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | head -10</code> | |
− | echo "Running containers: $(docker ps -q | wc -l)" | ||
− | echo "Total containers: $(docker ps -aq | wc -l)" | ||
− | |||
− | |||
− | echo "Images: $(docker images -q | wc -l)" | ||
− | |||
− | |||
− | echo "Disk usage:" | ||
− | docker system df | ||
− | |||
− | |||
− | echo "Top containers by CPU:" | ||
− | docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | head -10 | ||
− | </code> | ||
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | <code> | + | <code>sudo chmod +x /usr/local/bin/docker-monitor.sh</code> |
− | sudo chmod +x /usr/local/bin/docker-monitor.sh | ||
− | </code> | ||
== 9. Настройка сети Docker === | == 9. Настройка сети Docker === | ||
Строка 403: | Строка 274: | ||
1. Создайте сеть: | 1. Создайте сеть: | ||
− | <code> | + | <code>docker network create my-network</code> |
− | docker network create my-network | ||
− | </code> | ||
2. Просмотрите сети: | 2. Просмотрите сети: | ||
− | <code> | + | <code>docker network ls</code> |
− | docker network ls | ||
− | </code> | ||
3. Запустите контейнеры в сети: | 3. Запустите контейнеры в сети: | ||
− | <code> | + | <code>docker run -d --name web --network my-network nginx</code> |
− | docker run -d --name web --network my-network nginx | + | <code>docker run -d --name app --network my-network node:16</code> |
− | docker run -d --name app --network my-network node:16 | ||
− | </code> | ||
=== Настройка моста === | === Настройка моста === | ||
1. Создайте мост: | 1. Создайте мост: | ||
− | <code> | + | <code>docker network create --driver bridge --subnet=172.20.0.0/16 my-bridge</code> |
− | docker network create --driver bridge --subnet=172.20.0.0/16 my-bridge | ||
− | </code> | ||
2. Подключите контейнер к мосту: | 2. Подключите контейнер к мосту: | ||
− | <code> | + | <code>docker run -d --name web --network my-bridge nginx</code> |
− | docker run -d --name web --network my-bridge nginx | ||
− | </code> | ||
== 10. Управление данными === | == 10. Управление данными === | ||
Строка 435: | Строка 296: | ||
1. Создайте том: | 1. Создайте том: | ||
− | <code> | + | <code>docker volume create my-volume</code> |
− | docker volume create my-volume | ||
− | </code> | ||
2. Просмотрите тома: | 2. Просмотрите тома: | ||
− | <code> | + | <code>docker volume ls</code> |
− | docker volume ls | ||
− | </code> | ||
3. Используйте том в контейнере: | 3. Используйте том в контейнере: | ||
− | <code> | + | <code>docker run -d --name web -v my-volume:/var/www/html nginx</code> |
− | docker run -d --name web -v my-volume:/var/www/html nginx | ||
− | </code> | ||
=== Создание bind mount === | === Создание bind mount === | ||
1. Создайте bind mount: | 1. Создайте bind mount: | ||
− | <code> | + | <code>docker run -d --name web -v /host/path:/container/path nginx</code> |
− | docker run -d --name web -v /host/path:/container/path nginx | ||
− | </code> | ||
2. Создайте read-only mount: | 2. Создайте read-only mount: | ||
− | <code> | + | <code>docker run -d --name web -v /host/path:/container/path:ro nginx</code> |
− | docker run -d --name web -v /host/path:/container/path:ro nginx | ||
− | </code> | ||
== 11. Устранение неполадок === | == 11. Устранение неполадок === | ||
Строка 482: | Строка 333: | ||
1. Проверьте статус Docker: | 1. Проверьте статус Docker: | ||
− | <code> | + | <code>sudo systemctl status docker</code> |
− | sudo systemctl status docker | ||
− | </code> | ||
2. Проверьте информацию о системе: | 2. Проверьте информацию о системе: | ||
− | <code> | + | <code>docker info</code> |
− | docker info | ||
− | </code> | ||
3. Проверьте логи Docker: | 3. Проверьте логи Docker: | ||
− | <code> | + | <code>sudo journalctl -u docker -f</code> |
− | sudo journalctl -u docker -f | ||
− | </code> | ||
4. Проверьте использование ресурсов: | 4. Проверьте использование ресурсов: | ||
− | <code> | + | <code>docker system df</code> |
− | docker system df | + | <code>docker stats --no-stream</code> |
− | docker stats --no-stream | ||
− | </code> | ||
== 12. Оптимизация производительности === | == 12. Оптимизация производительности === | ||
Строка 507: | Строка 350: | ||
1. Отредактируйте конфигурацию Docker: | 1. Отредактируйте конфигурацию Docker: | ||
− | <code> | + | <code>sudo nano /etc/docker/daemon.json</code> |
− | sudo nano /etc/docker/daemon.json | ||
− | </code> | ||
2. Добавьте настройки: | 2. Добавьте настройки: | ||
− | <code> | + | <code>{</code> |
− | { | + | <code>"log-driver": "json-file",</code> |
− | + | <code>"log-opts": {</code> | |
− | + | <code>"max-size": "10m",</code> | |
− | + | <code>"max-file": "3"</code> | |
− | + | <code>},</code> | |
− | + | <code>"storage-driver": "overlay2",</code> | |
− | + | <code>"storage-opts": [</code> | |
− | + | <code>"overlay2.override_kernel_check=true"</code> | |
− | + | <code>]</code> | |
− | + | <code>}</code> | |
− | } | ||
− | </code> | ||
3. Перезапустите Docker: | 3. Перезапустите Docker: | ||
− | <code> | + | <code>sudo systemctl restart docker</code> |
− | sudo systemctl restart docker | ||
− | </code> | ||
=== Очистка системы === | === Очистка системы === | ||
1. Очистите неиспользуемые ресурсы: | 1. Очистите неиспользуемые ресурсы: | ||
− | <code> | + | <code>docker system prune -a</code> |
− | docker system prune -a | ||
− | </code> | ||
2. Очистите только неиспользуемые образы: | 2. Очистите только неиспользуемые образы: | ||
− | <code> | + | <code>docker image prune -a</code> |
− | docker image prune -a | ||
− | </code> | ||
3. Очистите неиспользуемые тома: | 3. Очистите неиспользуемые тома: | ||
− | <code> | + | <code>docker volume prune</code> |
− | docker volume prune | ||
− | </code> | ||
4. Очистите неиспользуемые сети: | 4. Очистите неиспользуемые сети: | ||
− | <code> | + | <code>docker network prune</code> |
− | docker network prune | ||
− | </code> | ||
== Заключение == | == Заключение == |
Версия 20:00, 14 октября 2025
Содержание
- 1 Установка и настройка Docker
- 1.1 1. Подготовка системы
- 1.2 2. Установка Docker =
- 1.3 3. Настройка Docker =
- 1.4 4. Основы работы с Docker =
- 1.5 5. Создание Dockerfile =
- 1.6 6. Настройка Docker Compose =
- 1.7 7. Настройка Docker Registry =
- 1.8 8. Мониторинг Docker =
- 1.9 9. Настройка сети Docker =
- 1.10 10. Управление данными =
- 1.11 11. Устранение неполадок =
- 1.12 12. Оптимизация производительности =
- 1.13 Заключение
Установка и настройка Docker
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Установка Docker =
Установка через официальный репозиторий
1. Обновите список пакетов:
sudo apt update
2. Установите необходимые пакеты:
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
3. Добавьте официальный GPG ключ Docker:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
4. Добавьте репозиторий Docker:
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. Обновите список пакетов:
sudo apt update
6. Установите Docker:
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Установка через snap
1. Установите Docker через snap:
sudo snap install docker
2. Добавьте пользователя в группу docker:
sudo usermod -aG docker $USER
3. Настройка Docker =
Запуск и включение автозапуска
1. Запустите Docker:
sudo systemctl start docker
2. Включите автозапуск:
sudo systemctl enable docker
3. Проверьте статус:
sudo systemctl status docker
Настройка пользователей
1. Добавьте пользователя в группу docker:
sudo usermod -aG docker $USER
2. Перезагрузите сессию или выполните:
newgrp docker
3. Проверьте права:
docker run hello-world
4. Основы работы с Docker =
Основные команды
1. Просмотр информации о Docker:
docker --version
docker info
2. Просмотр образов:
docker images
3. Просмотр контейнеров:
docker ps
docker ps -a
4. Просмотр всех ресурсов:
docker system df
Работа с образами
1. Скачивание образа:
docker pull nginx
docker pull ubuntu:20.04
2. Поиск образов:
docker search nginx
3. Удаление образа:
docker rmi nginx
docker rmi $(docker images -q)
Работа с контейнерами
1. Запуск контейнера:
docker run -d --name my-nginx nginx
2. Запуск с портами:
docker run -d -p 8080:80 --name my-nginx nginx
3. Запуск с переменными окружения:
docker run -d -e MYSQL_ROOT_PASSWORD=password --name my-mysql mysql
4. Остановка контейнера:
docker stop my-nginx
5. Удаление контейнера:
docker rm my-nginx
5. Создание Dockerfile =
Базовый Dockerfile
1. Создайте Dockerfile:
nano Dockerfile
2. Добавьте содержимое:
FROM ubuntu:20.04
LABEL maintainer="admin@example.com"
LABEL description="My custom application"
RUN apt update && apt install -y \
nginx \
curl \
&& rm -rf /var/lib/apt/lists/*
COPY index.html /var/www/html/
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Создание образа
1. Создайте образ:
docker build -t my-app:latest .
2. Создайте образ с тегом:
docker build -t my-app:v1.0 .
3. Запустите контейнер:
docker run -d -p 8080:80 --name my-app-container my-app:latest
6. Настройка Docker Compose =
Установка Docker Compose
1. Установите Docker Compose:
sudo apt install docker-compose
2. Проверьте версию:
docker-compose --version
Создание docker-compose.yml
1. Создайте файл конфигурации:
nano docker-compose.yml
2. Добавьте содержимое:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./html:/usr/share/nginx/html
depends_on:
- app
app:
image: node:16
working_dir: /app
volumes:
- ./app:/app
command: npm start
ports:
- "3000:3000"
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: myapp
MYSQL_USER: user
MYSQL_PASSWORD: password
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
mysql_data:
Управление Docker Compose
1. Запуск сервисов:
docker-compose up -d
2. Остановка сервисов:
docker-compose down
3. Просмотр логов:
docker-compose logs
docker-compose logs web
4. Перезапуск сервисов:
docker-compose restart
7. Настройка Docker Registry =
Установка локального Registry
1. Запустите Docker Registry:
docker run -d -p 5000:5000 --name registry registry:2
2. Создайте образ для Registry:
docker tag my-app:latest localhost:5000/my-app:latest
3. Отправьте образ в Registry:
docker push localhost:5000/my-app:latest
Настройка аутентификации
1. Создайте директорию для аутентификации:
sudo mkdir -p /auth
2. Создайте пользователя:
sudo htpasswd -Bbn username password > /auth/htpasswd
3. Запустите Registry с аутентификацией:
docker run -d -p 5000:5000 --name registry \
-v /auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
registry:2
8. Мониторинг Docker =
Просмотр статистики
1. Просмотрите статистику контейнеров:
docker stats
2. Просмотрите статистику конкретного контейнера:
docker stats my-container
3. Просмотрите использование ресурсов:
docker system df
Создание скрипта мониторинга
1. Создайте скрипт мониторинга:
sudo nano /usr/local/bin/docker-monitor.sh
2. Добавьте содержимое:
echo "=== Docker Monitoring ==="
echo "Date: $(date)"
echo ""
if systemctl is-active --quiet docker; then
echo "Docker is running"
else
echo "Docker is not running"
fi
echo "Running containers: $(docker ps -q | wc -l)"
echo "Total containers: $(docker ps -aq | wc -l)"
echo "Images: $(docker images -q | wc -l)"
echo "Disk usage:"
docker system df
echo "Top containers by CPU:"
docker stats --no-stream --format "table Шаблон:.Container\tШаблон:.CPUPerc\tШаблон:.MemUsage" | head -10
3. Сделайте скрипт исполняемым:
sudo chmod +x /usr/local/bin/docker-monitor.sh
9. Настройка сети Docker =
Создание пользовательской сети
1. Создайте сеть:
docker network create my-network
2. Просмотрите сети:
docker network ls
3. Запустите контейнеры в сети:
docker run -d --name web --network my-network nginx
docker run -d --name app --network my-network node:16
Настройка моста
1. Создайте мост:
docker network create --driver bridge --subnet=172.20.0.0/16 my-bridge
2. Подключите контейнер к мосту:
docker run -d --name web --network my-bridge nginx
10. Управление данными =
Создание томов
1. Создайте том:
docker volume create my-volume
2. Просмотрите тома:
docker volume ls
3. Используйте том в контейнере:
docker run -d --name web -v my-volume:/var/www/html nginx
Создание bind mount
1. Создайте bind mount:
docker run -d --name web -v /host/path:/container/path nginx
2. Создайте read-only mount:
docker run -d --name web -v /host/path:/container/path:ro nginx
11. Устранение неполадок =
Частые проблемы
1. Docker не запускается:
- Проверьте статус:
sudo systemctl status docker
- Проверьте логи:
sudo journalctl -u docker
- Проверьте права:
groups $USER
2. Контейнеры не запускаются:
- Проверьте логи:
docker logs container_name
- Проверьте ресурсы:
docker stats
- Проверьте образы:
docker images
3. Проблемы с сетью:
- Проверьте сети:
docker network ls
- Проверьте подключения:
docker network inspect network_name
Диагностика
1. Проверьте статус Docker:
sudo systemctl status docker
2. Проверьте информацию о системе:
docker info
3. Проверьте логи Docker:
sudo journalctl -u docker -f
4. Проверьте использование ресурсов:
docker system df
docker stats --no-stream
12. Оптимизация производительности =
Настройки производительности
1. Отредактируйте конфигурацию Docker:
sudo nano /etc/docker/daemon.json
2. Добавьте настройки:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
3. Перезапустите Docker:
sudo systemctl restart docker
Очистка системы
1. Очистите неиспользуемые ресурсы:
docker system prune -a
2. Очистите только неиспользуемые образы:
docker image prune -a
3. Очистите неиспользуемые тома:
docker volume prune
4. Очистите неиспользуемые сети:
docker network prune
Заключение
Docker успешно установлен и настроен! Теперь вы можете использовать контейнеризацию для ваших приложений.
Для размещения ваших Docker контейнеров на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных Docker приложений
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой Docker и оптимизацией производительности ваших контейнеров!