Установка и использование Docker

Docker – это производительное и легковесное приложение для контейнеризации процессов программ, основанное на LXC.

Данное руководство научит вас основам работы с Docker.

Docker предлагает полный набор инструментов высшего уровня для упаковки и подготовки компонентов приложения к работе в различных системах и машинах (виртуальных и физических).

Docker и его компоненты

Открытый проект Docker состоит из нескольких основных приложений и элементов, которые в большинстве своём основаны на функциях, библиотеках и фреймворках ядра Linux и сторонних сервисов.

Основные приложения Docker

  • Демон docker: управляет docker-контейнерами (LXC) хоста, на котором он установлен.
  • Командная строка docker: используется для передачи команд и обмена данными с демоном docker.
  • Реестр образов docker: общий или частный репозиторий образов docker.

Основные элементы Docker

  • Контейнеры: каталоги, в которых хранится приложение и его зависимости.
  • Образы: снапшоты контейнеров или операционной системы.
  • Docker-файлы: сценарии для автоматизации сборки образа.

Элементы Docker

Рассмотрим подробнее элементы, из которых состоит Docker.

Контейнеры Docker

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

Основные функции контейнеров:

  • Портативность приложений;
  • Изоляция процессов;
  • Блокирование несанкционированного доступа;
  • Управление ресурсами и многое другое.

Контейнеры устраняют следующие проблемы:

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

Контейнеры основаны на технологии LXC.

Контейнер можно разделить на слои. Каждый отдельный слой может использоваться несколькими контейнерами одновременно. Это делает установку гибкой и легковесной.

Каждый Docker-контейнер запускается с помощью образа Docker.

LXC (Linux Containers)

Linux Containers – это набор функций уровня ядра Linux, которые позволяют управлять контейнеризованными приложениями и их ресурсами. Благодаря отдельным функциям (например chroot, контрольным группам и профилям SELinux) LXC может выполнять контейнеризацию процессов приложения, управлять ими, изолировать их в пределах файловой системы и ограничивать ресурсы.

Образы Docker

Образы Docker – это основа Docker-контейнеров. Они похожи на образы дисков операционной системы.

Все контейнеры Docker запускаются из образов. По умолчанию образы Docker хранятся на Docker Hub – это реестр Docker, поддерживаемый командой разработчиков проекта. Разместить свой образ на Docker Hub может любой пользователь, потому здесь можно найти готовый образ для большинства приложений и дистрибутивов Linux.

Образы обеспечивают единую надёжную базу для запуска приложения. В образы можно добавлять новые инструменты и приложения и таким образом формировать новый образ.

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

Docker-файлы

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

Установка Docker

Примечание: Изначально платформа Docker была доступна только в Ubuntu. Теперь её можно использовать и в системах RHEL (например, в CentOS). В руководстве используется 64-битная система Ubuntu 14.04.

Обновите систему:

sudo apt-get update
sudo apt-get -y upgrade

Включите поддержку aufs:

sudo apt-get install linux-image-extra-`uname -r`

Добавьте ключ репозитория docker в apt-key:

sudo apt-key adv –keyserver hkp://pgp.mit.edu:80 –recv-keys 58118E89F3A912897C070ADBF76221572C52609D

Добавьте репозиторий docker в apt:

echo "deb https://apt.dockerproject.org/repo ubuntu-trusty main" | sudo tee /etc/apt/sources.list.d/docker.list

Обновите индекс пакетов:

sudo apt-get update

Загрузите и установите docker:

sudo apt-get install docker-engine

Брандмауэр Ubuntu по умолчанию UFW блокирует переадресацию трафика, а эта функция нужна для работы docker. Чтобы настроить UFW для поддержки переадресации, откройте конфигурационный файл:

sudo nano /etc/default/ufw

Найдите в нём строку:

DEFAULT_FORWARD_POLICY="DROP"

И замените её строкой:

DEFAULT_FORWARD_POLICY="ACCEPT"

Сохраните и закройте файл.

Перезапустите UFW:

sudo ufw reload

Примечание: Больше информации можно найти в официальной документации Docker.

Использование Docker

Теперь демон Docker запущен в фоновом режиме. Если демон не запустился, сделайте это вручную с помощью команды:

sudo docker -d &

Синтаксис Docker

Для запуска команды docker нужно передать ей ряд параметров и команд с аргументами.

sudo docker [option] [command] [arguments]

Начало работы

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

sudo docker

На экране появится список:

attach    Attach to a running container
build     Build a container from a Dockerfile
commit    Create a new image from a container's changes
cp        Copy files/folders from the containers filesystem to the host path
diff      Inspect changes on a container's filesystem
events    Get real time events from the server
export    Stream the contents of a container as a tar archive
history   Show the history of an image
images    List images
import    Create a new filesystem image from the contents of a tarball
info      Display system-wide information
insert    Insert a file in an image
inspect   Return low-level information on a container
kill      Kill a running container
load      Load an image from a tar archive
login     Register or Login to the docker registry server
logs      Fetch the logs of a container
port      Lookup the public-facing port which is NAT-ed to PRIVATE_PORT
ps        List containers
pull      Pull an image or a repository from the docker registry server
push      Push an image or a repository to the docker registry server
restart   Restart a running container
rm        Remove one or more containers
rmi       Remove one or more images
run       Run a command in a new container
save      Save an image to a tar archive
search    Search for an image in the docker index
start     Start a stopped container
stop      Stop a running container
tag       Tag an image into a repository
top       Lookup the running processes of a container
version   Show the docker version information
wait      Block until a container stops, then print its exit code

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

sudo docker info
sudo docker version

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

Как говорилось ранее, образы являются ключевым элементом docker. По умолчанию образы Docker хранятся в реестре Docker Hub. На Docker Hub доступно множество готовых образов.

Чтобы найти нужный образ, введите:

# Общий синтаксис: sudo docker search [image name] sudo docker search ubuntu

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

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

# Общий синтаксис: sudo docker pull [image name] sudo docker pull ubuntu

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

sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
my_img              latest              72461793563e        36 seconds ago      128 MB
ubuntu              12.04               8dbd9e392a96        8 months ago        128 MB
ubuntu              latest              8dbd9e392a96        8 months ago        128 MB
ubuntu              precise             8dbd9e392a96        8 months ago        128 MB
ubuntu              12.10               b750fe79269d        8 months ago        175.3 MB
ubuntu              quantal             b750fe79269d        8 months ago        175.3 MB

Коммиты контейнеров Docker

Файловые системы Docker являются временными по умолчанию. После запуска образа Docker вы можете создавать, изменять и удалять файлы, но после остановки контейнера все изменения будут потеряны: ранее удалённые файлы восстановятся, а все новые файлы или изменения в данных будут утрачены. Чтобы сохранить изменения, используйте команду commit:

# Общий синтаксис: sudo docker commit [container ID] [image name]

sudo docker commit 8dbd9e392a96 my_img

Загрузка образов Docker в репозиторий

Создав новый образ Docker, вы можете поделиться им на Docker Hub или в другом репозитории Docker. Для этого нужно зарегистрироваться.

Чтобы загрузить свой образ, введите:

sudo docker push my_username/my_first_image

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

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

sudo docker ps

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

sudo docker ps -l

Создание нового контейнера

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

# Общий синтаксис: sudo docker run [image name] [command to run] sudo docker run my_img echo "hello"
# Выбрать имя контейнера
# Общий синтаксис: sudo docker run -name [name] [image name] [comm.] sudo docker run -name my_cont_1 my_img echo "hello"

Управление контейнерами

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

# Общий синтаксис: sudo docker run [container ID] sudo docker run c629b7d70666

Чтобы остановить контейнер:

# Общий синтаксис: sudo docker stop [container ID] sudo docker stop c629b7d70666

Сохранение изменений в контейнере

Чтобы сохранить изменения, внесённые в контейнер, используйте команду commit. Эта команда превратит контейнер в новый образ.

Удаление контейнера

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

# Общий синтаксис: sudo docker rm [container ID] sudo docker rm c629b7d70666

Примечание: Больше полезной информации можно найти в официальной документации.

Tags: , ,

Добавить комментарий