Установка и настройка Docker — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Установка и настройка Docker = == 1. Подготовка системы == * Войдите в систему под учетной зап…»)
 
Строка 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>
    nginx \
+
<code>CMD ["nginx", "-g", "daemon off;"]</code>
    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;"]
 
</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>
  web:
+
<code>ports:</code>
    image: nginx:latest
+
<code>- "80:80"</code>
    ports:
+
<code>volumes:</code>
      - "80:80"
+
<code>- ./html:/usr/share/nginx/html</code>
    volumes:
+
<code>depends_on:</code>
      - ./html:/usr/share/nginx/html
+
<code>- app</code>
    depends_on:
+
<code>app:</code>
      - app
+
<code>image: node:16</code>
 
+
<code>working_dir: /app</code>
  app:
+
<code>volumes:</code>
    image: node:16
+
<code>- ./app:/app</code>
    working_dir: /app
+
<code>command: npm start</code>
    volumes:
+
<code>ports:</code>
      - ./app:/app
+
<code>- "3000:3000"</code>
    command: npm start
+
<code>database:</code>
    ports:
+
<code>image: mysql:8.0</code>
      - "3000:3000"
+
<code>environment:</code>
 
+
<code>MYSQL_ROOT_PASSWORD: rootpassword</code>
  database:
+
<code>MYSQL_DATABASE: myapp</code>
    image: mysql:8.0
+
<code>MYSQL_USER: user</code>
    environment:
+
<code>MYSQL_PASSWORD: password</code>
      MYSQL_ROOT_PASSWORD: rootpassword
+
<code>volumes:</code>
      MYSQL_DATABASE: myapp
+
<code>- mysql_data:/var/lib/mysql</code>
      MYSQL_USER: user
+
<code>ports:</code>
      MYSQL_PASSWORD: password
+
<code>- "3306:3306"</code>
    volumes:
+
<code>volumes:</code>
      - mysql_data:/var/lib/mysql
+
<code>mysql_data:</code>
    ports:
 
      - "3306:3306"
 
 
 
volumes:
 
  mysql_data:
 
</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>
  -v /auth:/auth \
+
<code>-e "REGISTRY_AUTH=htpasswd" \</code>
  -e "REGISTRY_AUTH=htpasswd" \
+
<code>-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \</code>
  -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
+
<code>-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \</code>
  -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
+
<code>registry:2</code>
  registry:2
 
</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>
#!/bin/bash
+
<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>
# Статус Docker
+
<code>fi</code>
if systemctl is-active --quiet docker; then
+
<code>echo "Running containers: $(docker ps -q | wc -l)"</code>
    echo "Docker is running"
+
<code>echo "Total containers: $(docker ps -aq | wc -l)"</code>
else
+
<code>echo "Images: $(docker images -q | wc -l)"</code>
    echo "Docker is not running"
+
<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
 
 
 
# Топ контейнеров по использованию CPU
 
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>
    "log-driver": "json-file",
+
<code>"log-opts": {</code>
    "log-opts": {
+
<code>"max-size": "10m",</code>
        "max-size": "10m",
+
<code>"max-file": "3"</code>
        "max-file": "3"
+
<code>},</code>
    },
+
<code>"storage-driver": "overlay2",</code>
    "storage-driver": "overlay2",
+
<code>"storage-opts": [</code>
    "storage-opts": [
+
<code>"overlay2.override_kernel_check=true"</code>
        "overlay2.override_kernel_check=true"
+
<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

Содержание

Установка и настройка 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):

Наши специалисты помогут с настройкой Docker и оптимизацией производительности ваших контейнеров!