Введение
Docker - это мощная платформа контейнеризации, которая революционизировала способ, которым разработчики создают, развертывают и управляют приложениями. В этом руководстве вы узнаете, как проверить установку Docker и убедиться, что она работает правильно. Вы также узнаете, как решать общие проблемы, которые могут возникнуть при работе с Docker.
По окончании этого практического занятия (Lab) вы будете хорошо понимать, как проверить детали установки Docker и убедиться, что ваша среда Docker функционирует корректно.
Для этого практического занятия (Lab) требуется подключение к интернету для обучения, поэтому запуск виртуальной машины (VM) доступен только пользователям LabEx Pro. Перейдите на тариф Pro
Проверка версии и статуса Docker
Прежде чем приступать к операциям с Docker, необходимо убедиться, что Docker правильно установлен на вашей системе и запущен корректно. В этом шаге мы проверим версию Docker и статус демона.
Проверка версии Docker
Сначала проверим версию Docker, установленную на вашей системе. Откройте терминал и выполните следующую команду:
docker --version

Эта команда отображает установленную версию Docker. Вы должны увидеть вывод, похожий на следующий:
Docker version 20.10.21, build baeda1f
Для получения более подробной информации о версии, включая как клиентскую, так и серверную компоненты, используйте:
docker version
Это покажет полную информацию о версии Docker-клиента и сервера (демона), а также другие детали, такие как версия Go, использованная для сборки Docker. Вывод будет выглядеть примерно так:
Client:
Version: 20.10.21
API version: 1.41
Go version: go1.18.1
Git commit: baeda1f
Built: Tue Oct 25 18:02:28 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.18.1
Git commit: 3056208
Built: Tue Oct 25 18:00:19 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: 770bd0108c32f3fb5c73ae1264f7e503fe7b2661
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
Если вы получите ошибку "docker: command not found", это означает, что Docker не установлен правильно или не добавлен в переменную PATH.
Проверка статуса демона Docker
Далее убедимся, что демон Docker (сервис) запущен. Демон Docker - это фоновый сервис, ответственный за управление контейнерами Docker.
Выполните следующую команду:
sudo systemctl status docker
Вы должны увидеть вывод, указывающий, что служба Docker активна и запущена:
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2023-05-10 12:34:56 UTC; 2h 15min ago
Main PID: 1234 (dockerd)
Tasks: 8
Memory: 38.5M
CPU: 25.102s
CGroup: /system.slice/docker.service
└─1234 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Если служба Docker не запущена, вы можете запустить ее с помощью команды:
sudo systemctl start docker
Для того, чтобы Docker автоматически запускался при загрузке системы, вы можете включить его:
sudo systemctl enable docker
Проверка информации о Docker
Для получения полного обзора вашей установки Docker используйте команду docker info:
docker info
Это отобразит подробную информацию о вашей установке Docker, включая:
- Количество контейнеров и образов
- Драйвер хранения
- Корневую директорию Docker
- Информацию о среде выполнения
- Настройки сети
- Конфигурацию реестра
Вывод будет довольно обширным, но он предоставит ценную информацию о вашей настройке Docker.
Запуск тестового контейнера
Теперь, когда мы убедились, что Docker установлен и запущен, давайте протестируем его, запустив простой контейнер. Этот шаг позволит проверить, что Docker может правильно скачивать образы и запускать контейнеры.
Контейнер "Hello World"
Docker предоставляет простой образ "hello-world", специально разработанный для тестирования установок Docker. Этот небольшой контейнер проверяет, что:
- Docker-клиент может подключиться к Docker-демону
- Docker-демон может загружать образы с Docker Hub
- Docker может создать и запустить контейнер
Давайте запустим этот тестовый контейнер с помощью следующей команды:
docker run hello-world
При первом запуске этой команды Docker:
- Проверит, существует ли образ hello-world локально
- Если нет, загрузит его с Docker Hub
- Создаст контейнер на основе этого образа
- Запустит контейнер, который выведет сообщение и завершит работу
Вы должны увидеть вывод, похожий на следующий:
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:ffb13da98453e0f04d33a6eee5bb8e46ee50d08ebe17735fc0779d0349e889e9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Это сообщение подтверждает, что ваша установка Docker работает правильно.
Перечисление контейнеров
После запуска контейнера hello-world проверим список контейнеров на вашей системе. Контейнер, который мы только что запустили, уже завершил работу, но мы все еще можем увидеть его в списке всех контейнеров.
Чтобы увидеть все контейнеры (включая остановленные), выполните:
docker ps -a
Вы должны увидеть вывод, похожий на следующий:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b7c33e8f6cb8 hello-world "/hello" 2 minutes ago Exited (0) 2 minutes ago romantic_galileo
Флаг -a показывает все контейнеры, включая остановленные. Без этого флага команда docker ps показывала бы только запущенные контейнеры.
Обратите внимание, что в столбце STATUS указано "Exited (0)", что означает, что контейнер успешно завершил свою задачу и завершил работу со статус-кодом 0 (что указывает на успешное выполнение).
Перечисление Docker-образов
Образ hello-world был загружен на вашу локальную машину. Давайте убедимся в этом, перечислив все Docker-образы:
docker images
Вы должны увидеть вывод, похожий на следующий:
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
Это подтверждает, что образ hello-world хранится локально на вашей системе.
Исследование базовых команд Docker
Теперь, когда мы убедились, что наша установка Docker работает правильно, давайте рассмотрим некоторые базовые команды Docker, которые помогут вам управлять контейнерами и образами.
Запуск интерактивного контейнера
В отличие от контейнера hello-world, который запускается и сразу завершает работу, мы можем запускать контейнеры интерактивно. Давайте запустим контейнер Ubuntu и взаимодействуем с его оболочкой:
docker run -it ubuntu bash
Эта команда:
-iоставляет STDIN открытым-tвыделяет псевдо - TTY (терминал)ubuntu- имя образаbash- команда, которая будет запущена внутри контейнера
После запуска контейнера вы окажетесь в оболочке bash внутри контейнера:
root@3f4d92618a09:/#
Подсказка показывает, что вы вошли в контейнер как root. Алфавитно - цифровая строка - это идентификатор контейнера.
Попробуйте выполнить некоторые команды Linux внутри контейнера:
cat /etc/os-release
Это отобразит информацию о версии Ubuntu, запущенной в контейнере:
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
Когда вы закончите исследование, выйдите из контейнера, набрав:
exit
Это вернет вас в терминал хоста.
Управление жизненным циклом контейнера
Давайте рассмотрим, как управлять жизненным циклом контейнера. Сначала мы запустим контейнер в отсоединенном режиме:
docker run -d --name web nginx
Эта команда:
-dзапускает контейнер в отсоединенном режиме (в фоновом режиме)--name webприсваивает контейнеру имя "web"nginx- образ, который будет использован
Вы увидите длинный идентификатор контейнера, выведенный на экран.
Теперь проверим, что контейнер запущен:
docker ps
Вы должны увидеть, что контейнер nginx запущен:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7d3f8c1f8a3d nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp web
Чтобы остановить контейнер:
docker stop web
Проверьте, что он остановлен:
docker ps
Контейнер больше не должен отображаться в списке запущенных контейнеров. Чтобы увидеть все контейнеры, включая остановленные:
docker ps -a
Вы должны увидеть как контейнер nginx, так и контейнер hello - world в остановленном состоянии.
Чтобы запустить контейнер снова:
docker start web
И чтобы удалить контейнер, когда он вам больше не нужен:
docker stop web
docker rm web
Управление Docker - образами
Давайте рассмотрим, как управлять Docker - образами. Чтобы вывести список всех образов:
docker images
Вы должны увидеть как минимум образы hello - world и nginx.
Чтобы удалить образ, когда он вам больше не нужен:
docker rmi hello-world
Обратите внимание, что вы не можете удалить образы, которые используются контейнерами (даже остановленными). Сначала вам нужно удалить эти контейнеры.
Информация о системе Docker
Чтобы проверить объем дискового пространства, используемого Docker (контейнеры, образы, тома):
docker system df
Это покажет сводку об использовании дискового пространства:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 2 1 187.8MB 187.8MB (99%)
Containers 2 0 0B 0B
Local Volumes 0 0 0B 0B
Build Cache 0 0 0B 0B
Чтобы получить более подробную информацию:
docker system df -v
Это покажет детализацию каждого образа и контейнера, а также их размеры.
Устранение распространенных проблем с Docker
Даже при правильно установленной среде Docker вы можете столкнуться с проблемами в процессе обычного использования. Давайте рассмотрим некоторые распространенные проблемы с Docker и способы их решения.
Проблема: Docker-демон не запущен
Вы можете пропустить этот шаг, если уже запустили службу Docker на предыдущем шаге.
Если вы пытаетесь выполнить команду Docker и получаете такую ошибку:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Это означает, что Docker-демон не запущен. Чтобы решить эту проблему:
- Проверьте статус службы Docker:
sudo systemctl status docker
- Если он не запущен, запустите его:
sudo systemctl start docker
- Если служба не запускается, проверьте журналы на наличие ошибок:
sudo journalctl -u docker
Давайте смоделируем эту проблему и ее решение:
## Сначала остановите службу Docker, чтобы смоделировать проблему
sudo systemctl stop docker
## Попытайтесь выполнить команду Docker
docker ps
## Вы увидите ошибку "Cannot connect"
## Теперь перезапустите службу, чтобы исправить проблему
sudo systemctl start docker
## Проверьте, что Docker снова работает
docker ps
Проблема: Отказано в доступе
Если вы видите такую ошибку:
Got permission denied while trying to connect to the Docker daemon socket
Обычно это означает, что ваш пользователь не имеет разрешения на доступ к сокету Docker. Решением является добавление вашего пользователя в группу docker:
sudo usermod -aG docker $USER
После выполнения этой команды обычно нужно выйти из системы и войти снова, чтобы изменения вступили в силу. Поскольку мы находимся в лабораторной среде с пользователем labex, который уже имеет соответствующие разрешения, нам не нужно выполнять этот шаг.
Проблема: Проблемы с дисковым пространством
С течением времени Docker может потреблять значительное количество дискового пространства из-за неиспользуемых образов, контейнеров и томов. Если на вашем диске заканчивается свободное пространство:
- Проверьте использование дискового пространства Docker:
docker system df
- Удалите неиспользуемые ресурсы:
## Удалите все остановленные контейнеры
docker container prune
## Удалите все неиспользуемые образы
docker image prune
## Удалите все неиспользуемые тома
docker volume prune
## Или удалите все неиспользуемые ресурсы одной командой
docker system prune
Давайте продемонстрируем команду очистки:
## Создайте несколько контейнеров, которые сразу завершат работу
docker run hello-world
docker run ubuntu echo "This will exit immediately"
## Теперь очистите остановленные контейнеры
docker container prune
Вам будет предложено подтвердить операцию:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Введите y, чтобы подтвердить. Вы должны увидеть вывод, показывающий удаленные контейнеры.
Проблема: Контейнер не запускается
Если контейнер не запускается, вы можете провести исследование, проверив его журналы:
## Сначала попытайтесь запустить контейнер, который может не запуститься
docker run --name failing-container ubuntu apt-get update
## Проверьте журналы
docker logs failing-container
В журналах вы можете увидеть ошибки, которые указывают на причину неудачного запуска контейнера.
Проблема: Проблемы с сетью
Если контейнеры не могут общаться между собой или с внешним миром:
- Проверьте конфигурацию сети Docker:
docker network ls
- Проверьте определенную сеть:
docker network inspect bridge
- Протестируйте связь изнутри контейнера:
## Запустите контейнер с сетевым доступом
docker run -it ubuntu bash
## Изнутри контейнера установите утилиту ping
apt-get update && apt-get install -y iputils-ping
## Попытайтесь выполнить пинг веб-сайта
ping google.com
## Выйдите из контейнера
exit
Журналы Docker и отладка
Для общего устранения проблем с Docker полезно проверять журналы Docker-демона:
sudo journalctl -u docker
Для журналов определенного контейнера:
docker logs <container_id>
Вы также можете получить поток журналов в режиме реального времени:
docker logs -f <container_id>
Эти методы устранения неполадок помогут вам диагностировать и решить большинство распространенных проблем с Docker.
Резюме
В этом практическом занятии вы научились важным навыкам проверки и управления установкой Docker:
- Проверка версии Docker и статуса демона для подтверждения правильной установки
- Запуск тестовых контейнеров для проверки функциональности Docker
- Использование базовых команд Docker для управления контейнерами и образами
- Исследование управления жизненным циклом контейнеров
- Устранение распространенных проблем с Docker
Эти навыки создают прочный фундамент для работы с контейнерами Docker. Теперь вы можете уверенно проверить, что ваша среда Docker настроена правильно, и устранить любые проблемы, которые могут возникнуть.
По мере продолжения изучения Docker вы сможете основываться на этих знаниях, чтобы эффективно создавать, развертывать и управлять контейнеризованными приложениями.



