Установка и использование Docker
Ubuntu | Комментировать запись
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: Docker, LXC, Ubuntu 14.04