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

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к навигации Перейти к поиску
Нет описания правки
Нет описания правки
 
Строка 6: Строка 6:
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.


== 2. Установка Docker ===
== 2. Установка Docker ==


=== Установка через официальный репозиторий ===
=== Установка через официальный репозиторий ===


1. Обновите список пакетов:
1. Обновите список пакетов:
<code>sudo apt update</code>
<pre>sudo apt update</pre>


2. Установите необходимые пакеты:
2. Установите необходимые пакеты:
<code>sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release</code>
<pre>sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release</pre>


3. Добавьте официальный GPG ключ Docker:
3. Добавьте официальный GPG ключ Docker:
<code>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg</code>
<pre>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg</pre>


4. Добавьте репозиторий Docker:
4. Добавьте репозиторий Docker:
<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>
<pre>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</pre>


5. Обновите список пакетов:
5. Обновите список пакетов:
<code>sudo apt update</code>
<pre>sudo apt update</pre>


6. Установите Docker:
6. Установите Docker:
<code>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</code>
<pre>sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin</pre>


=== Установка через snap ===
=== Установка через snap ===


1. Установите Docker через snap:
1. Установите Docker через snap:
<code>sudo snap install docker</code>
<pre>sudo snap install docker</pre>


2. Добавьте пользователя в группу docker:
2. Добавьте пользователя в группу docker:
<code>sudo usermod -aG docker $USER</code>
<pre>sudo usermod -aG docker $USER</pre>


== 3. Настройка Docker ===
== 3. Настройка Docker ==


=== Запуск и включение автозапуска ===
=== Запуск и включение автозапуска ===


1. Запустите Docker:
1. Запустите Docker:
<code>sudo systemctl start docker</code>
<pre>sudo systemctl start docker</pre>


2. Включите автозапуск:
2. Включите автозапуск:
<code>sudo systemctl enable docker</code>
<pre>sudo systemctl enable docker</pre>


3. Проверьте статус:
3. Проверьте статус:
<code>sudo systemctl status docker</code>
<pre>sudo systemctl status docker</pre>


=== Настройка пользователей ===
=== Настройка пользователей ===


1. Добавьте пользователя в группу docker:
1. Добавьте пользователя в группу docker:
<code>sudo usermod -aG docker $USER</code>
<pre>sudo usermod -aG docker $USER</pre>


2. Перезагрузите сессию или выполните:
2. Перезагрузите сессию или выполните:
<code>newgrp docker</code>
<pre>newgrp docker</pre>


3. Проверьте права:
3. Проверьте права:
<code>docker run hello-world</code>
<pre>docker run hello-world</pre>


== 4. Основы работы с Docker ===
== 4. Основы работы с Docker ==


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


1. '''Просмотр информации о Docker''':
1. '''Просмотр информации о Docker''':
<code>docker --version</code>
<pre>docker --version</pre>
<code>docker info</code>
<pre>docker info</pre>


2. '''Просмотр образов''':
2. '''Просмотр образов''':
<code>docker images</code>
<pre>docker images</pre>


3. '''Просмотр контейнеров''':
3. '''Просмотр контейнеров''':
<code>docker ps</code>
<pre>docker ps</pre>
<code>docker ps -a</code>
<pre>docker ps -a</pre>


4. '''Просмотр всех ресурсов''':
4. '''Просмотр всех ресурсов''':
<code>docker system df</code>
<pre>docker system df</pre>


=== Работа с образами ===
=== Работа с образами ===


1. '''Скачивание образа''':
1. '''Скачивание образа''':
<code>docker pull nginx</code>
<pre>docker pull nginx</pre>
<code>docker pull ubuntu:20.04</code>
<pre>docker pull ubuntu:20.04</pre>


2. '''Поиск образов''':
2. '''Поиск образов''':
<code>docker search nginx</code>
<pre>docker search nginx</pre>


3. '''Удаление образа''':
3. '''Удаление образа''':
<code>docker rmi nginx</code>
<pre>docker rmi nginx</pre>
<code>docker rmi $(docker images -q)</code>
<pre>docker rmi $(docker images -q)</pre>


=== Работа с контейнерами ===
=== Работа с контейнерами ===


1. '''Запуск контейнера''':
1. '''Запуск контейнера''':
<code>docker run -d --name my-nginx nginx</code>
<pre>docker run -d --name my-nginx nginx</pre>


2. '''Запуск с портами''':
2. '''Запуск с портами''':
<code>docker run -d -p 8080:80 --name my-nginx nginx</code>
<pre>docker run -d -p 8080:80 --name my-nginx nginx</pre>


3. '''Запуск с переменными окружения''':
3. '''Запуск с переменными окружения''':
<code>docker run -d -e MYSQL_ROOT_PASSWORD=password --name my-mysql mysql</code>
<pre>docker run -d -e MYSQL_ROOT_PASSWORD=password --name my-mysql mysql</pre>


4. '''Остановка контейнера''':
4. '''Остановка контейнера''':
<code>docker stop my-nginx</code>
<pre>docker stop my-nginx</pre>


5. '''Удаление контейнера''':
5. '''Удаление контейнера''':
<code>docker rm my-nginx</code>
<pre>docker rm my-nginx</pre>


== 5. Создание Dockerfile ===
== 5. Создание Dockerfile ==


=== Базовый Dockerfile ===
=== Базовый Dockerfile ===


1. Создайте Dockerfile:
1. Создайте Dockerfile:
<code>nano Dockerfile</code>
<pre>nano Dockerfile</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>FROM ubuntu:20.04</code>
<pre>FROM ubuntu:20.04</pre>
<code>LABEL maintainer="admin@example.com"</code>
<pre>LABEL maintainer="admin@example.com"</pre>
<code>LABEL description="My custom application"</code>
<pre>LABEL description="My custom application"</pre>
<code>RUN apt update && apt install -y \</code>
<pre>RUN apt update && apt install -y \</pre>
<code>nginx \</code>
<pre>nginx \</pre>
<code>curl \</code>
<pre>curl \</pre>
<code>&& rm -rf /var/lib/apt/lists/*</code>
<pre>&& rm -rf /var/lib/apt/lists/*</pre>
<code>COPY index.html /var/www/html/</code>
<pre>COPY index.html /var/www/html/</pre>
<code>COPY nginx.conf /etc/nginx/nginx.conf</code>
<pre>COPY nginx.conf /etc/nginx/nginx.conf</pre>
<code>EXPOSE 80</code>
<pre>EXPOSE 80</pre>
<code>CMD ["nginx", "-g", "daemon off;"]</code>
<pre>CMD ["nginx", "-g", "daemon off;"]</pre>


=== Создание образа ===
=== Создание образа ===


1. Создайте образ:
1. Создайте образ:
<code>docker build -t my-app:latest .</code>
<pre>docker build -t my-app:latest .</pre>


2. Создайте образ с тегом:
2. Создайте образ с тегом:
<code>docker build -t my-app:v1.0 .</code>
<pre>docker build -t my-app:v1.0 .</pre>


3. Запустите контейнер:
3. Запустите контейнер:
<code>docker run -d -p 8080:80 --name my-app-container my-app:latest</code>
<pre>docker run -d -p 8080:80 --name my-app-container my-app:latest</pre>


== 6. Настройка Docker Compose ===
== 6. Настройка Docker Compose ==


=== Установка Docker Compose ===
=== Установка Docker Compose ===


1. Установите Docker Compose:
1. Установите Docker Compose:
<code>sudo apt install docker-compose</code>
<pre>sudo apt install docker-compose</pre>


2. Проверьте версию:
2. Проверьте версию:
<code>docker-compose --version</code>
<pre>docker-compose --version</pre>


=== Создание docker-compose.yml ===
=== Создание docker-compose.yml ===


1. Создайте файл конфигурации:
1. Создайте файл конфигурации:
<code>nano docker-compose.yml</code>
<pre>nano docker-compose.yml</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>version: '3.8'</code>
<pre>version: '3.8'</pre>
<code>services:</code>
<pre>services:</pre>
<code>web:</code>
<pre>web:</pre>
<code>image: nginx:latest</code>
<pre>image: nginx:latest</pre>
<code>ports:</code>
<pre>ports:</pre>
<code>- "80:80"</code>
<pre>- "80:80"</pre>
<code>volumes:</code>
<pre>volumes:</pre>
<code>- ./html:/usr/share/nginx/html</code>
<pre>- ./html:/usr/share/nginx/html</pre>
<code>depends_on:</code>
<pre>depends_on:</pre>
<code>- app</code>
<pre>- app</pre>
<code>app:</code>
<pre>app:</pre>
<code>image: node:16</code>
<pre>image: node:16</pre>
<code>working_dir: /app</code>
<pre>working_dir: /app</pre>
<code>volumes:</code>
<pre>volumes:</pre>
<code>- ./app:/app</code>
<pre>- ./app:/app</pre>
<code>command: npm start</code>
<pre>command: npm start</pre>
<code>ports:</code>
<pre>ports:</pre>
<code>- "3000:3000"</code>
<pre>- "3000:3000"</pre>
<code>database:</code>
<pre>database:</pre>
<code>image: mysql:8.0</code>
<pre>image: mysql:8.0</pre>
<code>environment:</code>
<pre>environment:</pre>
<code>MYSQL_ROOT_PASSWORD: rootpassword</code>
<pre>MYSQL_ROOT_PASSWORD: rootpassword</pre>
<code>MYSQL_DATABASE: myapp</code>
<pre>MYSQL_DATABASE: myapp</pre>
<code>MYSQL_USER: user</code>
<pre>MYSQL_USER: user</pre>
<code>MYSQL_PASSWORD: password</code>
<pre>MYSQL_PASSWORD: password</pre>
<code>volumes:</code>
<pre>volumes:</pre>
<code>- mysql_data:/var/lib/mysql</code>
<pre>- mysql_data:/var/lib/mysql</pre>
<code>ports:</code>
<pre>ports:</pre>
<code>- "3306:3306"</code>
<pre>- "3306:3306"</pre>
<code>volumes:</code>
<pre>volumes:</pre>
<code>mysql_data:</code>
<pre>mysql_data:</pre>


=== Управление Docker Compose ===
=== Управление Docker Compose ===


1. '''Запуск сервисов''':
1. '''Запуск сервисов''':
<code>docker-compose up -d</code>
<pre>docker-compose up -d</pre>


2. '''Остановка сервисов''':
2. '''Остановка сервисов''':
<code>docker-compose down</code>
<pre>docker-compose down</pre>


3. '''Просмотр логов''':
3. '''Просмотр логов''':
<code>docker-compose logs</code>
<pre>docker-compose logs</pre>
<code>docker-compose logs web</code>
<pre>docker-compose logs web</pre>


4. '''Перезапуск сервисов''':
4. '''Перезапуск сервисов''':
<code>docker-compose restart</code>
<pre>docker-compose restart</pre>


== 7. Настройка Docker Registry ===
== 7. Настройка Docker Registry ==


=== Установка локального Registry ===
=== Установка локального Registry ===


1. Запустите Docker Registry:
1. Запустите Docker Registry:
<code>docker run -d -p 5000:5000 --name registry registry:2</code>
<pre>docker run -d -p 5000:5000 --name registry registry:2</pre>


2. Создайте образ для Registry:
2. Создайте образ для Registry:
<code>docker tag my-app:latest localhost:5000/my-app:latest</code>
<pre>docker tag my-app:latest localhost:5000/my-app:latest</pre>


3. Отправьте образ в Registry:
3. Отправьте образ в Registry:
<code>docker push localhost:5000/my-app:latest</code>
<pre>docker push localhost:5000/my-app:latest</pre>


=== Настройка аутентификации ===
=== Настройка аутентификации ===


1. Создайте директорию для аутентификации:
1. Создайте директорию для аутентификации:
<code>sudo mkdir -p /auth</code>
<pre>sudo mkdir -p /auth</pre>


2. Создайте пользователя:
2. Создайте пользователя:
<code>sudo htpasswd -Bbn username password > /auth/htpasswd</code>
<pre>sudo htpasswd -Bbn username password > /auth/htpasswd</pre>


3. Запустите Registry с аутентификацией:
3. Запустите Registry с аутентификацией:
<code>docker run -d -p 5000:5000 --name registry \</code>
<pre>docker run -d -p 5000:5000 --name registry \</pre>
<code>-v /auth:/auth \</code>
<pre>-v /auth:/auth \</pre>
<code>-e "REGISTRY_AUTH=htpasswd" \</code>
<pre>-e "REGISTRY_AUTH=htpasswd" \</pre>
<code>-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \</code>
<pre>-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \</pre>
<code>-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \</code>
<pre>-e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \</pre>
<code>registry:2</code>
<pre>registry:2</pre>


== 8. Мониторинг Docker ===
== 8. Мониторинг Docker ==


=== Просмотр статистики ===
=== Просмотр статистики ===


1. Просмотрите статистику контейнеров:
1. Просмотрите статистику контейнеров:
<code>docker stats</code>
<pre>docker stats</pre>


2. Просмотрите статистику конкретного контейнера:
2. Просмотрите статистику конкретного контейнера:
<code>docker stats my-container</code>
<pre>docker stats my-container</pre>


3. Просмотрите использование ресурсов:
3. Просмотрите использование ресурсов:
<code>docker system df</code>
<pre>docker system df</pre>


=== Создание скрипта мониторинга ===
=== Создание скрипта мониторинга ===


1. Создайте скрипт мониторинга:
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/docker-monitor.sh</code>
<pre>sudo nano /usr/local/bin/docker-monitor.sh</pre>


2. Добавьте содержимое:
2. Добавьте содержимое:
<code>echo "=== Docker Monitoring ==="</code>
<pre>echo "=== Docker Monitoring ==="</pre>
<code>echo "Date: $(date)"</code>
<pre>echo "Date: $(date)"</pre>
<code>echo ""</code>
<pre>echo ""</pre>
<code>if systemctl is-active --quiet docker; then</code>
<pre>if systemctl is-active --quiet docker; then</pre>
<code>echo "Docker is running"</code>
<pre>echo "Docker is running"</pre>
<code>else</code>
<pre>else</pre>
<code>echo "Docker is not running"</code>
<pre>echo "Docker is not running"</pre>
<code>fi</code>
<pre>fi</pre>
<code>echo "Running containers: $(docker ps -q | wc -l)"</code>
<pre>echo "Running containers: $(docker ps -q | wc -l)"</pre>
<code>echo "Total containers: $(docker ps -aq | wc -l)"</code>
<pre>echo "Total containers: $(docker ps -aq | wc -l)"</pre>
<code>echo "Images: $(docker images -q | wc -l)"</code>
<pre>echo "Images: $(docker images -q | wc -l)"</pre>
<code>echo "Disk usage:"</code>
<pre>echo "Disk usage:"</pre>
<code>docker system df</code>
<pre>docker system df</pre>
<code>echo "Top containers by CPU:"</code>
<pre>echo "Top containers by CPU:"</pre>
<code>docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | head -10</code>
<pre>docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | head -10</pre>


3. Сделайте скрипт исполняемым:
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/docker-monitor.sh</code>
<pre>sudo chmod +x /usr/local/bin/docker-monitor.sh</pre>


== 9. Настройка сети Docker ===
== 9. Настройка сети Docker ==


=== Создание пользовательской сети ===
=== Создание пользовательской сети ===


1. Создайте сеть:
1. Создайте сеть:
<code>docker network create my-network</code>
<pre>docker network create my-network</pre>


2. Просмотрите сети:
2. Просмотрите сети:
<code>docker network ls</code>
<pre>docker network ls</pre>


3. Запустите контейнеры в сети:
3. Запустите контейнеры в сети:
<code>docker run -d --name web --network my-network nginx</code>
<pre>docker run -d --name web --network my-network nginx</pre>
<code>docker run -d --name app --network my-network node:16</code>
<pre>docker run -d --name app --network my-network node:16</pre>


=== Настройка моста ===
=== Настройка моста ===


1. Создайте мост:
1. Создайте мост:
<code>docker network create --driver bridge --subnet=172.20.0.0/16 my-bridge</code>
<pre>docker network create --driver bridge --subnet=172.20.0.0/16 my-bridge</pre>


2. Подключите контейнер к мосту:
2. Подключите контейнер к мосту:
<code>docker run -d --name web --network my-bridge nginx</code>
<pre>docker run -d --name web --network my-bridge nginx</pre>


== 10. Управление данными ===
== 10. Управление данными ==


=== Создание томов ===
=== Создание томов ===


1. Создайте том:
1. Создайте том:
<code>docker volume create my-volume</code>
<pre>docker volume create my-volume</pre>


2. Просмотрите тома:
2. Просмотрите тома:
<code>docker volume ls</code>
<pre>docker volume ls</pre>


3. Используйте том в контейнере:
3. Используйте том в контейнере:
<code>docker run -d --name web -v my-volume:/var/www/html nginx</code>
<pre>docker run -d --name web -v my-volume:/var/www/html nginx</pre>


=== Создание bind mount ===
=== Создание bind mount ===


1. Создайте bind mount:
1. Создайте bind mount:
<code>docker run -d --name web -v /host/path:/container/path nginx</code>
<pre>docker run -d --name web -v /host/path:/container/path nginx</pre>


2. Создайте read-only mount:
2. Создайте read-only mount:
<code>docker run -d --name web -v /host/path:/container/path:ro nginx</code>
<pre>docker run -d --name web -v /host/path:/container/path:ro nginx</pre>


== 11. Устранение неполадок ===
== 11. Устранение неполадок ==


=== Частые проблемы ===
=== Частые проблемы ===


1. '''Docker не запускается''':
1. '''Docker не запускается''':
* Проверьте статус: <code>sudo systemctl status docker</code>
* Проверьте статус: <pre>sudo systemctl status docker</pre>
* Проверьте логи: <code>sudo journalctl -u docker</code>
* Проверьте логи: <pre>sudo journalctl -u docker</pre>
* Проверьте права: <code>groups $USER</code>
* Проверьте права: <pre>groups $USER</pre>


2. '''Контейнеры не запускаются''':
2. '''Контейнеры не запускаются''':
* Проверьте логи: <code>docker logs container_name</code>
* Проверьте логи: <pre>docker logs container_name</pre>
* Проверьте ресурсы: <code>docker stats</code>
* Проверьте ресурсы: <pre>docker stats</pre>
* Проверьте образы: <code>docker images</code>
* Проверьте образы: <pre>docker images</pre>


3. '''Проблемы с сетью''':
3. '''Проблемы с сетью''':
* Проверьте сети: <code>docker network ls</code>
* Проверьте сети: <pre>docker network ls</pre>
* Проверьте подключения: <code>docker network inspect network_name</code>
* Проверьте подключения: <pre>docker network inspect network_name</pre>


=== Диагностика ===
=== Диагностика ===


1. Проверьте статус Docker:
1. Проверьте статус Docker:
<code>sudo systemctl status docker</code>
<pre>sudo systemctl status docker</pre>


2. Проверьте информацию о системе:
2. Проверьте информацию о системе:
<code>docker info</code>
<pre>docker info</pre>


3. Проверьте логи Docker:
3. Проверьте логи Docker:
<code>sudo journalctl -u docker -f</code>
<pre>sudo journalctl -u docker -f</pre>


4. Проверьте использование ресурсов:
4. Проверьте использование ресурсов:
<code>docker system df</code>
<pre>docker system df</pre>
<code>docker stats --no-stream</code>
<pre>docker stats --no-stream</pre>


== 12. Оптимизация производительности ===
== 12. Оптимизация производительности ==


=== Настройки производительности ===
=== Настройки производительности ===


1. Отредактируйте конфигурацию Docker:
1. Отредактируйте конфигурацию Docker:
<code>sudo nano /etc/docker/daemon.json</code>
<pre>sudo nano /etc/docker/daemon.json</pre>


2. Добавьте настройки:
2. Добавьте настройки:
<code>{</code>
<pre>{</pre>
<code>"log-driver": "json-file",</code>
<pre>"log-driver": "json-file",</pre>
<code>"log-opts": {</code>
<pre>"log-opts": {</pre>
<code>"max-size": "10m",</code>
<pre>"max-size": "10m",</pre>
<code>"max-file": "3"</code>
<pre>"max-file": "3"</pre>
<code>},</code>
<pre>},</pre>
<code>"storage-driver": "overlay2",</code>
<pre>"storage-driver": "overlay2",</pre>
<code>"storage-opts": [</code>
<pre>"storage-opts": [</pre>
<code>"overlay2.override_kernel_check=true"</code>
<pre>"overlay2.override_kernel_check=true"</pre>
<code>]</code>
<pre>]</pre>
<code>}</code>
<pre>}</pre>


3. Перезапустите Docker:
3. Перезапустите Docker:
<code>sudo systemctl restart docker</code>
<pre>sudo systemctl restart docker</pre>


=== Очистка системы ===
=== Очистка системы ===


1. Очистите неиспользуемые ресурсы:
1. Очистите неиспользуемые ресурсы:
<code>docker system prune -a</code>
<pre>docker system prune -a</pre>


2. Очистите только неиспользуемые образы:
2. Очистите только неиспользуемые образы:
<code>docker image prune -a</code>
<pre>docker image prune -a</pre>


3. Очистите неиспользуемые тома:
3. Очистите неиспользуемые тома:
<code>docker volume prune</code>
<pre>docker volume prune</pre>


4. Очистите неиспользуемые сети:
4. Очистите неиспользуемые сети:
<code>docker network prune</code>
<pre>docker network prune</pre>


== Заключение ==
== Заключение ==

Текущая версия от 10:42, 15 октября 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 и оптимизацией производительности ваших контейнеров!