Введение
Docker — это платформа, которая упрощает запуск процессов приложений и управление ими в контейнерах. Она позволяет отделить ваши приложения от вашей инфраструктуры. Контейнеры очень похожи на виртуальные машины, но они более портативны, эффективны и просты в использовании. Существуют различные способы установки Docker на дистрибутивы Linux. Самый популярный и простой способ установить Docker на существующую операционную систему — использовать команды yum.
В этом руководстве будет показано, как настроить и использовать Docker на CentOS 7 за несколько простых шагов.
Предварительные требования:
- 64-разрядный экземпляр CentOS 7.
- Пользователь без прав root, но с привилегиями sudo.
Все команды, которые вы выполняете в этом руководстве, запускаются от имени пользователя без прав root, и при необходимости доступ root будет предоставлен с помощью ключевого слова sudo.
Шаг 1. Настройка Docker на CentOS 7
В официальном репозитории CentOS 7 может не быть последнего установочного пакета Docker. В этом разделе вы установите последнюю версию Docker из официального репозитория Docker. Сначала вам нужно обновить базу данных пакетов с помощью:
|
1 |
sudo yum check-update |
После завершения обновления выполните команду ниже, чтобы загрузить и установить последнюю версию Docker:
|
1 |
curl -fsSL https://get.docker.com/ | sh |
Теперь Docker установлен, поэтому вы можете запустить демон Docker, выполнив команду ниже:
|
1 |
sudo systemctl start docker |
Чтобы проверить, запущен ли демон Docker, введите следующее:
|
1 |
sudo systemctl status docker |
Вывод команды systemctl status должен быть похож на приведенный ниже вывод, который показывает, что служба запущена:
|
1 2 3 4 5 6 |
Output: ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Wed 2021-02-17 18:22:06 UTC; 10s ago Docs: https://docs.docker.com Main PID: 21884 (dockerd) |
Наконец, чтобы Docker запускался при перезагрузке компьютера, используйте команду:
|
1 |
sudo systemctl enable docker |
Установка Docker предоставляет вам как службу Docker, так и клиентскую утилиту (клиент командной строки Docker). В следующих разделах руководства вы сможете попрактиковаться в использовании команд Docker.
Вы также можете ознакомиться с нашим подробным руководством по установке & работе с Docker на Ubuntu в публичном облаке.
Шаг 2. Использование команд Docker без префикса Sudo
Для запуска команд Docker требуются привилегии root. Таким образом, если вы хотите запускать команды, вам придется добавлять к ним префикс sudo. При установке по умолчанию создается группа Docker. Если вы добавите пользователя в эту группу, вы сможете запускать команды Docker без sudo. Попытка запустить команды Docker без sudo или без добавления пользователя в группу приведет к выводу, аналогичному приведенному ниже:
|
1 2 3 |
Output: docker: Cannot connect to the Docker daemon. Is the docker daemon running on this host?. See 'docker run --help'. |
Добавление вашего имени пользователя в группу Docker гарантирует, что вам не придется использовать sudo для запуска команд Docker:
|
1 |
sudo usermod -aG docker $(whoami) |
Чтобы добавить другого пользователя в группу Docker, вы можете просто заменить имя пользователя в команде:
|
1 |
sudo usermod -aG docker username |
В оставшейся части этого руководства мы будем предполагать, что все команды выполняются пользователем из группы пользователей Docker. Если это не так, вы можете использовать префикс sudo перед командами.
Шаг 3: Выполнение команд Docker
Теперь, когда Docker установлен и запущен, давайте рассмотрим несколько команд, чтобы ознакомиться с утилитой командной строки Docker. Команды Docker обычно имеют следующий вид:
|
1 |
docker [опция] [команда] [аргументы] |
Чтобы найти все доступные подкоманды, используйте:
|
1 |
docker |
По состоянию на Docker 20.10.3, полный список доступных подкоманд включает:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Вывод: attach Подключить локальные стандартные потоки ввода, , вывода, и ошибок streams к a запущенному контейнеру build Собрать an образ из a Dockerfile commit Создать a новый образ на основе a изменений в контейнере cp Копировать файлы/папки между контейнером и локальной файловой системой create Создать новый контейнер diff Проверить изменения файлов или каталогов в файловой системе контейнера events Получать события в реальном времени от сервера exec Запустить a команду в a запущенном контейнере export Экспортировать a файловую систему 'контейнера в виде tar- a архиваarchive history Показать the историю образаan image images Список образов import Импортировать the содержимое из a tar-архива для создания образа файловой системы info Отобразить системную -информациюinformation inspect Вернуть низкоуровневую -информацию об объектах Dockerobjects kill Принудительно остановить один или несколько запущенных контейнеров load Загрузить an образ из a tar-архива или STDIN STDIN login Войти в реестр Docker Docker registry logout Выйти из реестра Docker Docker registry logs Получить the логи контейнера a container pause Приостановить все процессы в одном или несколькихконтейнеры port Вывести список портов сопоставлений или a конкретное сопоставление для the контейнера ps Вывести список контейнеров pull Скачать an образ или a репозиторий из a реестра push Отправить an образ или a репозиторий в a реестр rename Переименовать a контейнер restart Перезапустить один или несколько контейнеров rm Удалить один или несколько контейнеров rmi Удалить один или несколько образов run Запустить a команду в a новом контейнере save Сохранить один или несколько образов в a tar-архив (, передаваемый в STDOUT по умолчанию) search Искать the Docker Hub на предмет образов start Запустить один или несколько остановленных контейнеров stats Отобразить a в реальном времени поток статистики использования (ресурсов ) контейнеровusage statistics stop Остановить один или несколько работающих контейнеров tag Создать a тег TARGET_IMAGE который ссылается на SOURCE_IMAGE top Отобразить the запущенные процессы of a контейнера unpause Возобновить работу всех процессов внутри одного или нескольких контейнеров update Обновить конфигурацию of одного или нескольких контейнеров version Показать the Docker версии информацию wait Блокировать до тех пор, пока один или несколько контейнеров не остановятся, , затем вывести их коды выхода |
Вы можете использовать флаг –help с конкретной командой, чтобы получить о ней дополнительную информацию:
|
1 |
docker subcommand --help |
Чтобы получить подробную информацию о системе, используйте:
|
1 |
docker info |
Шаг 4. Работа с образами Docker
Образы Docker можно назвать шаблонами для контейнеров Docker. Обычно эти образы загружаются из Docker Hub, который представляет собой реестр, управляемый проектом Docker. Любой желающий может создавать и отправлять свои образы в Docker Hub. В результате вы можете легко найти в реестре самые разные приложения и дистрибутивы операционных систем. Давайте опробуем простую программу, которая подтвердит доступ к Docker Hub:
|
1 |
docker run hello-world |
Вы должны получить следующий вывод, который показывает, что Docker работает:
|
1 2 3 4 |
Вывод: Привет от Docker! Это сообщение показывает, что ваша установка, по всей видимости, to работает working правильно. ... |
Вы можете найти различные образы Docker в Docker Hub с помощью команды поиска. Например, см. команду ниже для поиска образа CentOS:
|
1 |
docker search centos |
Поисковый запрос покажет список всех образов, которые совпали с подстрокой. В вашем случае вывод должен быть следующим:
|
1 2 3 4 5 6 7 8 |
Вывод: ИМЯ ОПИСАНИЕ ЗВЕЗДЫ ОФИЦИАЛЬНЫЙ AUTOMATED centos Официальная сборка build of CentOS. 6410 [OK] ansible/centos7-ansible Ansible на Centos7 132 [OK] consol/centos-xfce-vnc Centos контейнер с "headless" VNC сессией… 125 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL репозитории… 117 [OK] centos/systemd systemd активирован базовый контейнер. 96 [OK] ... |
В результатах поиска есть разные столбцы, содержащие информацию об образе. Значение OK в столбце OFFICIAL указывает на то, что образ был создан и поддерживается компанией-разработчиком приложения. Выбрав подходящий образ, вы можете загрузить его на свой локальный компьютер с помощью команды Docker pull:
|
1 |
docker pull centos |
После загрузки образа вы можете запустить контейнер с помощью команды Docker run. Если вы попытаетесь запустить образ напрямую без предварительной загрузки, Docker сначала загрузит образ, а затем запустит контейнер:
|
1 |
docker run centos |
Вы можете просмотреть список образов, загруженных на ваш локальный компьютер, с помощью следующей команды:
|
1 |
docker images |
Вы должны получить похожий вывод:
|
1 2 3 4 |
Вывод: REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 300e315adb2f 2 месяца назад 209MB hello-world latest bf756fb1ae65 13 месяцев назад 13.3kB |
Позже в этом руководстве вы научитесь изменять образы для запуска контейнеров. Эти новые образы можно добавлять или отправлять в Docker Hub и другие реестры, в которых размещаются образы Docker.
Шаг 5. Интерактивный запуск контейнера
Существуют различные типы контейнеров. Контейнер hello-world, который вы запустили на Шаге 4 , относится к типу контейнеров, которые запускаются и завершают работу после вывода сообщения. Другой тип контейнеров — интерактивные. Вы можете использовать интерактивные контейнеры так же, как виртуальную машину.
Давайте создадим контейнер из последнего образа CentOS. Использование флагов -i и -t в команде Docker run предоставит интерактивный доступ к контейнеру CentOS:
|
1 |
docker run -it centos |
Командная строка изменится и должна выглядеть следующим образом:
|
1 2 |
Вывод: [root@3ce69d2a35b9 /]# |
|
1 |
Примечание: Идентификатор контейнера id, отображаемый в командной строке, уникален и очень пригодится вам в дальнейшем, в этом примере , он указан как именно этот: 3ce69d2a35b9. |
Теперь любая выполняемая вами команда будет запускаться внутри контейнера. Это аналогично выполнению команды на виртуальной машине. Давайте попробуем установить MySQL в контейнер CentOS. Вы можете сделать это с помощью:
|
1 |
yum install mysql |
Шаг 6. Сохранение изменений в контейнере в образ Docker
После запуска контейнера вы можете выполнять все операции, которые возможны в аналогичной виртуальной машине, например, создавать/изменять файлы или настраивать приложение. Обратите внимание, что эти изменения сохранятся только для этого контейнера, и после удаления контейнера внесенные вами изменения будут утеряны.
В этой части руководства вы узнаете, как создать новый образ Docker из контейнера с внесенными вами изменениями. После Step5 у вас будет запущен контейнер CentOS с установленным сервером MySQL. Этот контейнер теперь отличается от чистого образа CentOS. Вы можете сохранить это состояние контейнера для дальнейшего использования. Сначала вам нужно выйти из контейнера с помощью:
|
1 |
exit |
Зафиксируйте изменения, внесенные в контейнер, в новом образе Docker с помощью команды ниже:
|
1 |
docker commit -m "Changes done to the image" -a "Author Name" container-id repository/new_image_name |
В этой команде флаг -m указывает на сообщение коммита и должен в общих чертах описывать внесенные изменения, а флаг -a используется для указания автора. Container-id — это идентификатор из Step5, который вы получили после запуска контейнера в интерактивном режиме, а репозиторием обычно является ваше имя пользователя на Docker Hub. Например:
|
1 |
docker commit -m "added mysql-server" -a "CloudSigma" 59839a1b7de2 finid/centos-mariadb |
|
1 |
Примечание: После того как новый образ будет зафиксирован, он сохранится в вашей системе. . На следующих этапах этого руководства вы узнаете, , как отправить образ в Docker Hub и в аналогичные реестры, в которых размещаются образы docker. Как только ваш образ будет . отправлен в реестр, он может быть доступен другим , пользователям также.accessed by others as well. |
Теперь, когда образ зафиксирован, команда Docker images должна вывести как новый образ, так и старые:
|
1 |
docker images |
Вывод команды должен быть похож на следующий:
|
1 2 3 4 5 |
Output: REPOSITORY TAG IMAGE ID CREATED SIZE cloudsigma23/centos-mysql latest 1b9368efea70 13 секунд назад 308MB centos latest 300e315adb2f 2 месяца назад 209MB hello-world latest bf756fb1ae65 13 месяцев назад 13.3kB |
Как видно из примера, новый образ centos-mysql создан на основе образа CentOS из Docker Hub. Разница в размере указывает на то, что были внесены некоторые изменения. В данном примере это было добавление сервера MySQL в контейнер. В следующий раз, когда вам понадобится контейнер с сервером MySQL, вы сможете просто запустить новый образ, и вуаля! У вас будет запущен контейнер CentOS с предустановленным сервером MySQL.
Шаг 7. Управление контейнерами Docker
Теперь, когда вы знакомы с Docker, после некоторого времени его использования у вас уже есть несколько запущенных и несколько неактивных контейнеров. Чтобы получить список активных контейнеров, используйте:
|
1 |
docker ps |
Вы должны увидеть похожий вывод:
|
1 2 3 |
Вывод: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 604c889cf404 centos "/bin/bash" 20 минут назад Up 20 минут intelligent_easley |
Чтобы вывести список как активных, так и неактивных контейнеров, вам следует использовать флаг -a в команде:
|
1 |
docker ps -a |
Чтобы найти последний созданный вами контейнер, вы можете указать флаг -l:
|
1 |
docker ps -l |
Чтобы остановить запущенный/активный контейнер, выполните простую команду:
|
1 |
docker stop container-id |
Вы можете найти container-id в выводе команды Docker ps.
Шаг 8. Публикация образов в репозиторий
Следующий шаг после создания нового образа — поделиться им с друзьями. Вы также можете сделать его доступным для всего мира с помощью Docker Hub или любого другого реестра. Перед отправкой образа вам необходимо войти в соответствующий реестр.
В следующей части руководства вы узнаете, как отправлять образы в Docker Hub. Сначала зарегистрируйтесь на Docker Hub. Вам нужно будет войти в Docker Hub, чтобы отправить свой образ с помощью команды ниже:
|
1 |
docker login -u docker-registry-username |
После ввода правильного пароля и успешной аутентификации вы сможете отправить свой образ. Для отправки образа используйте команду ниже:
|
1 |
docker push docker-registry-username/docker-image-name |
Вывод команды будет похож на следующий:
|
1 2 3 4 5 |
Вывод: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Pushed 2653d992f4ef: Mounted from library/centos ... |
После того как вы отправите образ, он должен появиться на панели управления вашей учетной записи, как показано на рисунке ниже:

В случае аналогичной ошибки, скорее всего, вы не вошли в систему:
|
1 2 3 4 5 6 7 |
Вывод: The push refers to repository [docker.io/cloudsigma23/centos-mysql] ee30e80cbcc5: Layer already exists 2653d992f4ef: Layer already exists errors: denied: requested access to the resource is denied unauthorized: authentication required |
Вы можете войти в систему и повторить попытку отправки.
Заключение
Существует множество способов использования Docker. Это руководство должно предоставить вам достаточно информации для начала работы. А поскольку Docker — действительно популярный проект, вы можете найти множество подробностей об использовании, а также о различных сценариях применения в блоге проекта.
Вы также можете ознакомиться с другими нашими руководствами по Docker, чтобы узнать больше о его возможностях:
- Очистка ресурсов Docker — образы, контейнеры и тома
- Развертывание Laravel, Nginx и MySQL с помощью Docker Compose
- Запуск собственного VPN-сервера в Docker с помощью OpenVPN Access Server
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.