Андрей Смирнов
Время чтения: ~15 мин.
Просмотров: 25

Docker, часть 1 – установка, настройка и начало работы

Docker — это система управления контейнерами для Linux. Если говорить просто, то контейнеры — это что-то среднее между виртуальными машинами, с полной изоляцией и chroot окружением. Все процессы выполняются в изолированном пространстве, но в то же время на одном ядре, что позволяет экономить ресурсы основной системы.

Для работы docker ваша система должна отвечать таким требованиям:

  • Программа работает только на системах 64 битной архитектуры;
  • Необходимо ядро версии не ниже чем 3.10. В более старых версиях реализованы не все необходимые возможности, и это будет вызывать различные ошибки;
  • Быстрый интернет — для загрузки или выгрузки образов контейнера.

Если вы используете Ubuntu версии выше 16.04, то проблем с ядром не возникнет, так как эта система поставляется с ядром 4.2 по умолчанию.

Перед тем как переходить к установке самой программы, нужно обновить систему до актуального состояния. Для этого выполните:

Перед тем как установить Docker Ubuntu 18.04 необходимо установить дополнительные пакеты ядра, которые позволяют использовать Aufs для контейнеров Docker. С помощью этой файловой системы мы сможем следить за изменениями и делать мгновенные снимки контейнеров:

Ещё надо установить пакеты, необходимые для работы apt по https:

После того как все приготовления завершены и вы убедились что ваша система полностью готова, можно перейти к установке. Мы будем устанавливать программу из официального репозитория разработчиков. Сначала надо добавить ключ репозитория:

Затем добавьте репозиторий docker в систему:

И установка Docker на Ubuntu:

Теперь установка Docker Ubuntu 18.04 и всех необходимых компонентов завершена. Первой командой мы добавили ключ репозитория разработчиков, второй — сам репозиторий. Далее обновили списки пакетов и сообщили системе что можно заменять системные пакеты на пакеты из этого репозитория.

Чтобы завершить установку осталось добавить нашего пользователя в группу docker. Иначе при запуске утилиты вы будете получать ошибку подключения к сокету:

Для добавления выполните:

docker6-1024x528.png

Затем проверяем запущен ли сервис:

docker4-1024x569.png

Все готово к работе. Теперь рассмотрим подробнее использование Docker.

Сейчас работа с docker не обходится без утилиты управления контейнерами docker compose, давайте её тоже установим. Чтобы установить docker compose Ubuntu выполните последовательность команд:

Утилита была загружена из официального сайта и теперь вы можете посмотреть её версию:

Все действия с контейнерами выполняются утилитой docker. Ее можно запускать от имени вашего пользователя после того, как он был добавлен в группу программы. Синтаксис утилиты очень прост:

$ dockerопциикоманда опции_команды аргументы

docker5-1024x551.png

Давайте сначала рассмотрим основные опции утилиты их всего несколько:

  • -D — включить режим отладки;
  • -H — подключиться к серверу, запущенному на другом компьютере;
  • -l — изменить уровень ведения логов, доступно: debug,info,warn,error,fatal;
  • -v — показать версию;
  • —help вывести справку по команде или утилите в целом;

Команд намного больше, ниже приведены все команды, которые вы можете использовать в своих программах:

  • attach — подключиться к запущенному контейнеру;
  • build — собрать образ из инструкций dockerfile;
  • commit — создать новый образ из изменений контейнера;
  • cp — копировать файлы между контейнером и файловой системой;
  • create — создать новый контейнер;
  • diff — проверить файловую систему контейнера;
  • events — посмотреть события от контейнера;
  • exec — выполнить команду в контейнере;
  • export — извлечь содержимое контейнера в архив;
  • history — посмотреть историю изменений образа;
  • images — список установленных образов;
  • import — создать контейнер из архива tar;
  • info — посмотреть информацию о системе;
  • inspect — посмотреть информацию о контейнере;
  • kill — остановить запущенный контейнер;
  • load — загрузить образ из архива;
  • login — авторизация в официальном репозитории Docker;
  • logout — выйти из репозитория Docker;
  • logs — посмотреть логи контейнера;
  • pause — приостановить все процессы контейнера;
  • port — подброс портов для контейнера;
  • ps — список запущенных контейнеров;
  • pull — скачать образ контейнера из репозитория;
  • push — отправить образ в репозиторий;
  • restart — перезапустить контейнер;
  • rm — удалить контейнер;
  • run — выполнить команду в контейнере;
  • save — сохранить образ в архив tar;
  • search — поиск образов в репозитории по заданному шаблону;
  • start — запустить контейнер;
  • stats — статистика использования ресурсов контейнером;
  • stop — остановить контейнер;
  • top — посмотреть запущенные процессы в контейнере;
  • unpause — проложить выполнение процессов в контейнере.

В этой статье мы будем часто использовать команду run, рассмотрим ее опции:

  • -e — переменные окружения для команды;
  • -h — имя хоста контейнера;
  • -i — интерактивный режим, связывающий stdin терминала с командой;
  • -m — ограничение памяти для команды;
  • -u — пользователь, от имени которого будет выполнена команда;
  • -t — связать tty с контейнером для работы ввода и вывода;
  • -v — примонтировать директорию основной системы в контейнер.

Теперь, когда мы рассмотрели все основы, приведем несколько примеров работы с контейнерами. Это очень просто.

Чтобы убедиться что все работает давайте запустим тестовый образ. Для этого наберите:

Больше ничего не нужно, программа сама скачает образ, и выполнит оболочку в нем. Вы увидите сообщение Hello from Docker:

docker7-1024x583.png

Использование docker очень простое по своей сути. Если вы не знаете название нужного пакета, можете воспользоваться поиском, например, найдем Ubuntu:

docker24-1024x451.png

Утилита выведет список всех доступных для загрузки образов из репозитория Docker, которые содержат такое слово. Колонка Official означает, что образ поддерживается официальным разработчиком, а Stars — это количество пользователей, которым этот образ понравился.

Для загрузки образа на локальный компьютер используйте команду pull:

docker8-1024x571.png

После завершения загрузки вы можете посмотреть список установленных образов:

docker9-1024x578.png

Теперь, давайте запустим командную оболочку контейнера с помощью команды run, для получения интерактивного доступа используйте опции -i и -t:

docker10-1024x597.png

Вы в окружении контейнера. У вас есть права суперпользователя, но вы не можете получить доступ к основной системе. Контейнер содержит минимум необходимых файлов, нет даже текстовых редакторов. Для установки чего-либо сначала нужно обновить репозиторий:

docker11-1024x592.png

Например, установим утилиту dialog:

docker12-1024x583.png

Вы можете изменять контейнер как захотите, добавлять и удалять программы и многое другое. Но когда вы его удалите, все изменения будут потеряны. Вы можете создать новое образ из модифицированного контейнера, для этого используется команда commit. Сначала смотрим список запущенных контейнеров:

docker13-1024x553.png

Отсюда возьмите id контейнера, затем выполните такую команду для создания нового образа:

Например:

docker14.png

Новый образ был сохранен на вашем компьютере и вы можете увидеть его в списке образов:

docker15-1024x484.png

Как я уже говорил, вы можете посмотреть список запущенных контейнеров с помощью команды ps:

docker16-1024x491.png

Если вам нужны все контейнеры, используйте опцию -a:

Чтобы вывести последний созданный контейнер, используйте:

Чтобы остановить запущенный контейнер используйте команду stop:

Для запуска:

Вы можете подключиться к запущенному контейнеру с помощью attach:

Чтобы удалить контейнер со всеми изменениями выполните:

Вы этой статье мы рассмотрели как выполняется установка docker ubuntu 18.04. В этом дистрибутиве процесс установки не будет трудным даже для новичков. А возможность установки различных дистрибутивов в несколько команд может быть полезной во многих ситуациях. А вы пользуетесь Docker? Для решения каких задач? Напишите в комментариях!

3e1f6baaf24c122a0c40fb932d2a241fafb21f48.png

Введение

Docker – это система управления контейнерами; платформа, которая используется для запуска и работы с приложениями в контейнерах. Использование контейнеров популярно среди разработчиков, сетевых администраторов и других специалистов из-за той гибкости, которую предлагают контейнеры.

Docker имеет три важных компонента:

  • Docker Engine – клиент-серверное приложение, которое предоставляет основные возможности работы с контейнерами;
  • Docker Tools – набор инструментов для командной строки, которые используются для запуска контейнеров, создания новых образов и т.д.;
  • Docker Registry – место, где находятся образы контейнеров.

Требования

Для того, чтобы выполнить необходимые действия, вам понадобятся:

  • установленная ОС Ubuntu 16.04 с пользователем, который может выполнять команды sudo, и фаерволом;
  • аккаунтDocker Hub.

По умолчанию для выполнения команды docker необходимо иметь root-привилегии. Однако команду можно выполнять и без добавления sudo, если использовать пользователя, который находится в группе docker.

В данном руководстве предполагается, что сервер настроен так, чтобы выполнять команду docker можно без использования sudo.

Для такой настройки вам нужно ввести:

$ sudo usermod -aG docker ${USER}

Текущий пользователь будет добавлен в группу docker. Для того, чтобы изменения вступили в силу, выполните команду:

$ su - ${USER}

Шаг 1: установка Docker

Сначала нужно удалить все пакеты Docker, которые, возможно, были установлены ранее:

$ sudo apt-get remove docker docker-engine docker.io

А затем уже перейти к установке самого Docker:

$ sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -$ sudo apt-key fingerprint 0EBFCD88$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"$ sudo apt-get update$ sudo apt-get install -y docker-ce

После этого убедитесь в том, что установка произошла, следующей командой:

$ docker info

Она показывает информацию о Docker Engine, развернутом в окружении. А для того, чтобы посмотреть версию Docker Engine и Tools, введите:

$ docker version

Шаг 2: запуск контейнеров

Контейнеры Docker запускаются из существующих образов, которые находятся в репозитории. Образы могут хранить в приватных или публичных репозиториях. При использовании приватных репозиториев вам обязательно нужно будет использовать авторизацию. А к публичным репозиториям доступ есть у всех.

Для того, чтобы найти образ под названием hello-world, используйте вот такую команду:

$ docker search hello-world

Образов с подходящим именем может быть несколько. Выберите тот, который имеет наибольшее количество звезд (звезды отражают популярность образа).

Проверьте доступность образов в вашем локальном окружении следующей командой:

$ docker images

Так как вы еще не запустили ни одного контейнера, образов тоже еще нет. Загрузите и запустите образ:

$ docker pull hello-world$ docker run hello-world

Если вы введете команду docker run без загрузки образа, то Docker Engine все равно сначала загрузит образ, а затем запустит его. Если вы еще раз запустите команду docker images, то увидите, что образ hello-world теперь доступен локально.

Теперь можно запустить какой-нибудь более серьезный контейнер, например, веб-сервер Apache:

$ docker run -p 80:80 --name web -d httpd

Тут можно увидеть несколько дополнительных ключей:

  • -p — указывает, какой конкретный порт хоста будет привязан к порту контейнера (в данном случае это 80);
  • —name — указывает имя запущенного контейнера. Если не указать этот параметр, то Docker Engine назначит случайное имя;
  • -d — указывает на то, что контейнер будет запущен в фоновом режиме.  

Введите команду ниже для того, чтобы убедиться, что контейнер работает:

$ docker ps

В выводе вы увидите, что контейнер под названием web работает по 80 порту и привязан к 80 порту хоста.

Для того, чтобы остановить и убрать запущенный контейнер, используйте команды:

$ docker stop web$ docker rm web

Введите команду docker ps для того, чтобы убедиться, что контейнер был удален.

Шаг 3: добавление хранилища для контейнеров

Контейнеры сами по себе эфимерны, то есть все, что находится внутри контейнера, будет потеряно после удаления этого контейнера. Для того, чтобы данные существовали дольше, чем контейнер, к нему необходимо добавить том (volume). Том используется для длительного хранения нужных файлов (данных). Том — это директория файловой системы хоста.

Для начала нужно создать новую директорию:

$ mkdir htdocs

Теперь нужно запустить контейнер и смонтировать его с директорией htdocs:

$ docker run -p 80:80 --name web -d -v $PWD/htdocs:/usr/local/apache2/htdocs httpd

Введите команду для доступа к директории из контейнера:

$ docker exec -it web /bin/bash

Эта команда привязывает терминал к оболочке контейнеров в интерактивном режиме. Вы увидите, что теперь находитесь внутри контейнера. Перейдите в htdocs и создайте там какой-нибудь простой html-файл:

$ cd /usr/local/apache2/htdocs$ echo '' > index.html

Затем выйдите из оболочки:

$ exit

Выполнение команды curl localhost покажет, что вебсервер возвращает страницу, которую вы только что создали.

К этому файлу можно не только получать доступ, но и редактировать его:

$ cd htdocs$ cat index.html$ echo '' | sudo tee index.html >/dev/null

Если теперь ввести команду curl localhost, то вы увидите, что веб-сервер использует последнюю версию сайта.

Теперь удалите контейнер при помощи команды ниже:

$ docker rm -f web

Шаг 4: создание образов

Вы можете не только запускать существующие образы, но и создавать собственные и хранить их в репозитории.

Новые образы можно создавать из существующих контейнеров. Запустите еще раз контейнер httpd и измените начальный документ:

$ docker run -p 80:80 --name web -d httpd$ docker exec -it web /bin/bash$ cd htdocs$ echo '' > index.html$ exit

Контейнер запущен с отредактированным файлом index.html. Проверить это можно командойcurl localhost.

Перед тем, как превратить контейнер в неизменяемый образ, лучше остановить его:

$ docker stop web

А вот после этого уже можно команду commit, которая фактически превратит контейнер в неизменяемый образ.

$ docker commit web doweb

Подтвердите создание образа командой docker images. Она покажет образ doweb, который только что был создан.

Вы можете присвоить образу тег, а также поместить его в Docker Hub. Для этого выполните следующие команды (вместо your_docker_hub_username нужно написать имя пользователя вашего Docker Hub):

$ docker login$ docker tag your_docker_hub_username/doweb$ docker push

Проверить, что все сделано правильно, можно поискав новый образ в Docker Hub в браузере или в командной строке.

Шаг 5: запуск частного репозитория

Если вы хотите, чтобы образы были более защищенными, то лучше использовать частный репозиторий.

Docker Registry доступен как контейнер и запущен он может быть точно так же, как любой другой контейнер. Так как репозиторий может содержать множество образов, хорошим решением будет прикрепить к нему том хранилища.

$ docker run -d -p 5000:5000 --restart=always --name registry -v $PWD/registry:/var/lib/registry registry

Обратите внимание, что контейнер запускается в фоновом режиме с использованием порта 5000, а директория registry привязана к файловой системе хоста. Используйте команду docker ps для того, чтобы убедиться в том, что контейнер запущен.

Теперь вы можете присвоить тег локальному образу и передать его в приватный репозиторий. Но перед этим нужно скачать контейнер busybox из Docker Hub и присвоить тег ему.

$ docker pull busybox$ docker tag busybox localhost:5000/busybox$ docker images

Команда выше подтверждает, что контейнер busybox теперь имеет тег localhost:5000, поэтому передавайте образ в приватный репозиторий:

$ docker push localhost:5000/busybox

Теперь, когда образ отправлен, можно проделать следующее — удалить его из окружения, а потом вновь загрузить из репозитория:

$ docker rmi -f localhost:5000/busybox$ docker images$ docker pull localhost:5000/busybox$ docker images

Теперь вы выполнили полный цикл работы с образом: загрузка, присвоение тега, выгрузка в репозиторий и, наконец, снова загрузка.

Заключение

Из этого руководства вы узнали о том, как установить Docker, а потом работать с контейнерами и образами Docker. Для получения более подробной информации я рекомендую ознакомиться сдокументацией Docker.

Установить Docker можно на любом из тарифов VDS EVO: https://timeweb.com/ru/services/vds

Docker – это компактный инструмент виртуализации с открытым исходным кодом, работающий на уровне операционной системы, автоматизирующий развертывание приложений в контейнерах Linux и предоставляющий возможность упаковывать в контейнер приложение со всей необходимой структурой зависимостей (код, рабочая среда, библиотеки, переменные среды, файлы конфигурации). В отличие от виртуальных машин, разделяющих ресурсы физического хоста и обладающих собственной операционной системой, контейнер использует только часть операционной системы и представляет собой изолированную среду, процессы которой не оказывают влияние на работу за пределами контейнера. Это позволяет существенно снизить потребление ресурсов системы за счет выделения в контейнер только приложения и необходимых данных, а не обязательно целой операционной системы, как в виртуальной машине. Таким образом, контейнеры Linux обеспечивают быстрое развертывание приложений, облегчают тестирование, обслуживание и устранение неполадок, повышая безопасность.

Содержание

Основные понятия

Docker работает со следующими фундаментальными объектами:

  • Контейнер – среда приложения. Каждый контейнер имеет в своей основе образ, содержащий необходимые данные конфигурации. При запуске контейнера из образа над этим образом надстраивается новый уровень с изменяемой структурой. Если сохранить изменения, сохраняется новый уровень образа, а старый остается неизменным.
  • Образ – статический снимок состояния конфигурации контейнера. Образ – это неизменный слой, все изменения вносятся на самом высоком уровне и сохраняются только путем создания нового образа. Каждый образ зависит от одного или нескольких родительских образов.
  • Базовый образ – образ, не имеющий родительских образов. Базовые образы определяют рабочую среду, пакеты и утилиты, необходимые для запуска приложения в контейнере.

Установка и настройка Docker

Процесс установки Docker очень прост – достаточно воспользоваться менеджером пакетов:

# yum install docker

Какой-либо сложной настройки на данном этапе не требуется. После установки запустите сервис, проверьте его состояние и установите запуск при загрузке:

# systemctl start docker  # systemctl enable docker  # systemctl status docker

docker1.jpg

Далее запустите тестовый образ, чтобы проверить, что Docker работает правильно:

# docker run hello-world

docker2-2.jpg

Базовые команды Docker

Синтаксис команды docker в общем случае следующий:

docker [ОПЦИИ] КОМАНДА

Если запустить команду без опций, будет выведен список всех доступных команд:

# docker

docker3.jpg

Опции команды

—config ПУТЬ задать месторасположение файлов конфигурации клиента-D, —debug режим отладки-H, —host list сокет демона для подключения-l, —log-level string уровень ведения лога («debug»-отладка|»info»-информационное сообщение|»warn»-предупреждение|»error»-ошибка|»fatal»-критическая ошибка) (по умолчанию «info»)—tls использовать TLS; подразумевается при использовании —tlsverify—tlscacert ЦЕНТР доверять только сертификатам, подписанным заданным центром сертификации—tlscert string путь к файлу сертификата TLS—tlskey string путь к файлу ключа TLS—tlsverify использовать TLS и проверить сертификат у авторизованного центра-v, —version вывести информацию о версии и выйти

Команды управления:

builder управление сборкойconfig управление конфигурациейcontainer управление контейнерамиengine управление движкомimage управление образамиnetwork управление сетьюnode управление узлами в режиме «роя» (Swarm – инструмент кластеризации, позволяющий объединить несколько хостов в единый виртуальный хост)plugin управление дополнениямиsecret управление защищенными даннымиservice управление службамиstack управление стеками образовswarm управление режимом «роя»system управление системойtrust управление доверием (подпись образов, отзыв подписи, определение разрешений на подпись и т.д.)volume управление томами (подключаемыми к контейнеру элементами файловой системы)

Системная информация о Docker:

# docker info

Получение помощи:

# docker --help

Команда —help также может использоваться для получения справки по конкретной команде, например:

# docker builder --help

Загрузка образов

Чтобы начать работу с Docker, требуется загрузить на свою машину образ с Docker Hub. Docker Hub представляет собой набор репозиториев, где хранится огромное количество образов различных приложений и систем. Для пользования этими репозиториями потребуется зарегистрировать на Docker Hub свой аккаунт (это бесплатно), а затем войти в него следующей командой:

# docker login

У вас будут запрошены имя пользователя и пароль, введите их для получения доступа.

Теперь мы можем приступить к работе. Допустим, нам требуется образ Ubuntu. Сначала выполним поиск при помощи команды search:

# docker search ubuntu

docker4.jpg

Выбрав нужный образ, загрузите его на свою машину при помощи команды pull. В данном примере будет загружен официальный образ Ubuntu:

# docker pull ubuntu

docker5.jpg

Для просмотра всех загруженных в системе образов воспользуйтесь командой images:

# docker images

docker6.jpg

Если образ больше не нужен, командой rmi его можно удалить:

# docker rmi ubuntu

docker7.jpg

Запуск образа

Фактически при выполнении над образом какой-либо команды создается контейнер. После завершения ее выполнения контейнер останавливается и остается в незапущенном виде. Если запустить в том же образе другую команду, будет создан новый контейнер, и так далее. Все контейнеры будут оставаться в файловой системе узла, пока вы не удалите их командой rm.

Чтобы создать и запустить контейнер, вам потребуется запустить команду в загруженном образе, в данном случае Ubuntu. Для примера рассмотрим простейшую команду cat, которая выводит файл о версии дистрибутива:

# docker run ubuntu cat /etc/issue  Ubuntu 18.04.2 LTS n l

Структура этой команды следующая:

docker run [локальный образ] [запускаемая в контейнере команда]

Заключение

На этом мы завершим рассмотрение необходимых для работы с Docker базовых команд и примеров, а в следующей части руководства более подробно рассмотрим работу с контейнерами. Более подробную информацию можно получить из встроенной справки или официальной документации.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Используемые источники:

  • https://losst.ru/ustanovka-docker-na-ubuntu-16-04
  • https://timeweb.com/ru/community/articles/ustanovka-i-nastroyka-docker-1
  • https://itproffi.ru/docker-chast-1-ustanovka-nastrojka-i-nachalo-raboty/

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации