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

Обсудить

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

Введение

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 '<h1>Hello World from Container</h1>' > index.html

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

$ exit

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

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

$ cd htdocs

$ cat index.html

$ echo '<h1>Hello World from Host</h1>' | 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 '<h1>Welcome to my Web Application</h1>' > 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

Комментарии