Объяснение Docker: как создавать контейнеры Docker с запущенным Memcached
Статус: устарело
Эта статья устарела и больше не поддерживается.
Причина
Методы, описанные в этой статье, устарели и могут больше не отражать лучшие практики Docker.
Смотрите вместо этого
- Экосистема Docker: введение в общие компоненты
- Официальный контейнер memcached на Docker Hub
Введение
Для большинства веб-приложений крайне редко можно обнаружить, что ЦП является виновником отбрасывания HTTP-запросов или блокирования веб-сервера, на котором они размещены. Обычно это недостаточно спроектированная установка без задействованного уровня кэширования, потребляющая все ресурсы внутреннего хранилища данных (т.е. выбранной вами базы данных).
Memcached, который на данный момент не нуждается в представлении, может значительно повысить производительность стека развертывания вашего приложения, не внося никаких изменений в ваши доступные ресурсы (позволяя вам выжимать все до последнего кусочка его соков).
В этой статье DigitalOcean, особенно имея в виду тех, кто размещает несколько веб-приложений (например, несколько экземпляров WordPress, приложения Python и т. д.), мы собираемся создать образы докеров, чтобы быстро запустить (по запросу) контейнеры Memcached, которым можно управлять индивидуально. Эти контейнеры, хранящиеся и защищенные в своих собственных средах, будут работать с размещенным приложением, чтобы помочь им стать лучше и быстрее.
Глоссарий
1. Докер вкратце
2. Кратко о Memcached
3. Установка Docker на Ubuntu
4. Основные команды Docker
- Запуск демона Docker и использование CLI
- команды докера
5. Начало работы с созданием изображений Memcached
- Краткий обзор: что такое Dockerfiles?
- Обзор команд Dockerfile
- Создание файла Docker
- Окончательный файл Docker
- Создание образа Docker для контейнеров Memcached
6. Запуск докеризированных контейнеров Memcached
- Создание установленного контейнера Memcached
- Ограничение памяти для контейнера Memcached
- Тестирование контейнера Memcached
Докер вкратце
Проект docker предлагает инструменты более высокого уровня, работающие вместе, которые построены на основе некоторых функций ядра Linux. Цель состоит в том, чтобы помочь разработчикам и системным администраторам портировать приложения — вместе со всеми их зависимостями — и заставить их работать в разных системах и машинах — без головной боли.
Docker достигает этого путем создания безопасных сред на основе LXC (т. е. контейнеров Linux) для приложений, называемых контейнерами докеров. Эти контейнеры создаются с использованием образов Docker, которые можно создавать либо путем выполнения команд вручную, либо автоматически через Dockerfiles.
Примечание. Чтобы узнать больше о докере и его частях (например, демоне докеров, интерфейсе командной строки, изображениях и т. д.), ознакомьтесь с нашей вводной статьей к проекту: Объяснение докера: Начало работы.
Memcached вкратце
Memcached — это распределенный механизм хранения данных с открытым исходным кодом. Он был разработан для хранения определенных типов данных в ОЗУ (вместо традиционных дисков с более низкой скоростью) для очень быстрого извлечения приложениями, что сокращает время, необходимое для обработки запросов, за счет уменьшения количества запросов, выполняемых к более тяжелым наборам данных или API, таким как традиционные базы данных (например, MySQL).
Благодаря внедрению интеллектуального, хорошо спланированного и оптимизированного механизма кэширования становится возможным обрабатывать, казалось бы, большее количество запросов и выполнять приложениями больше процедур. Это наиболее важный вариант использования Memcached, как и любого другого приложения или компонента кэширования.
Memcached, на который в значительной степени полагаются и который используется в производстве для веб-сайтов и различных других приложений, стал одним из популярных инструментов для повышения производительности без необходимости использования дополнительного оборудования (например, большего количества серверов или серверных ресурсов).
Он работает путем хранения ключей и соответствующих им значений (размером до 1 МБ) в ассоциативном массиве (например, хеш-таблице), который можно масштабировать и распределять по большому количеству виртуальных серверов.
Установка Docker на Ubuntu (последняя версия)
Чтобы начать использовать проект Docker на своем VPS, вы можете либо использовать образ докера DigitalOcean для Ubuntu 13.04, либо установить его самостоятельно. В этом разделе мы быстро рассмотрим основные инструкции по установке Docker 0.7.1.
Инструкции по установке для Ubuntu
Обновите свою каплю:
sudo aptitude update
sudo aptitude -y upgrade
Убедитесь, что поддержка aufs доступна:
sudo aptitude install linux-image-extra-`uname -r`
Добавьте ключ репозитория докеров в apt-key для проверки пакета:
sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"
Добавьте репозиторий докеров в исходники aptitude:
sudo sh -c "echo deb http://get.docker.io/ubuntu docker main\
> /etc/apt/sources.list.d/docker.list"
Обновите репозиторий новым дополнением:
sudo aptitude update
Наконец, скачайте и установите докер:
sudo aptitude install lxc-docker
Брандмауэр Ubuntu по умолчанию (UFW: Uncomplicated Firewall) по умолчанию запрещает весь пересылаемый трафик, который необходим докеру.
Включите переадресацию с помощью UFW:
Отредактируйте конфигурацию UFW с помощью текстового редактора nano.
sudo nano /etc/default/ufw
Прокрутите вниз и найдите строку, начинающуюся с DEFAULT_FORWARD_POLICY.
Заменять:
DEFAULT_FORWARD_POLICY="DROP"
С:
DEFAULT_FORWARD_POLICY="ACCEPT"
Нажмите CTRL+X и подтвердите с помощью Y, чтобы сохранить и закрыть.
Наконец, перезагрузите UFW:
sudo ufw reload
Основные команды Docker
Прежде чем мы начнем работать с докером, давайте быстро пробежимся по его доступным командам, чтобы освежить нашу память из нашей первой статьи «Начало работы».
Запуск демона Docker и использование CLI
После установки демон docker должен работать в фоновом режиме, готовый принимать команды, отправляемые интерфейсом командной строки docker. В определенных ситуациях, когда может потребоваться запуск докера вручную, используйте следующее.
Запуск демона докера:
sudo docker -d &
Докер CLI Использование:
sudo docker [option] [command] [arguments]
Примечание: для работы докеру необходимы привилегии sudo.
Список команд
Вот сводка доступных в настоящее время (версия 0.7.1) команд docker:
прикреплять
Присоединиться к работающему контейнеру
строить
Создайте контейнер из Dockerfile
совершить
Создайте новый образ из изменений контейнера
ср
Скопируйте файлы/папки из файловой системы контейнеров на путь хоста
разница
Проверка изменений в файловой системе контейнера
события
Получайте события в реальном времени с сервера
экспорт
Потоковая передача содержимого контейнера в виде tar-архива
история
Показать историю изображения
изображений
Список изображений
Импортировать
Создайте новый образ файловой системы из содержимого архива
Информация
Отображение общесистемной информации
вставлять
Вставить файл в изображение
осмотреть
Вернуть низкоуровневую информацию о контейнере
убийство
Убить запущенный контейнер
нагрузка
Загрузить образ из tar-архива
авторизоваться
Зарегистрируйтесь или войдите на сервер реестра докеров
журналы
Получить журналы контейнера
порт
Найдите общедоступный порт, который NAT-ed для PRIVATE_PORT
PS
Список контейнеров
тянуть
Извлеките образ или репозиторий с сервера реестра докеров.
толкать
Отправьте образ или репозиторий на сервер реестра докеров.
перезапуск
Перезапустите работающий контейнер
г.м.
Удалить один или несколько контейнеров
рми
Удалить одно или несколько изображений
бегать
Запустить команду в новом контейнере
сохранять
Сохранение изображения в tar-архив
поиск
Поиск изображения в индексе докера
начинать
Запустить остановленный контейнер
останавливаться
Остановить работающий контейнер
ярлык
Пометить изображение в хранилище
вершина
Поиск запущенных процессов контейнера
версия
Показать информацию о версии докера
Начало работы с созданием изображений Memcached
Основываясь на наших знаниях, полученных из предыдущих статей серии о докере, давайте сразу приступим к созданию Dockerfile, чтобы докер автоматически создавал установленные образы Memcached (которые будут использоваться для запуска изолированных экземпляров Memcached).
Краткий обзор: что такое Dockerfiles?
Файлы Docker — это сценарии, содержащие последовательно объявленные команды, которые должны выполняться в указанном порядке докером для автоматического создания нового образа докера. Они очень помогают при развертывании.
Эти файлы всегда начинаются с определения базового образа с помощью команды FROM. С этого момента начинается процесс сборки, и каждое последующее действие завершается фиксацией (сохранением состояния образа) на хосте.
Использование:
# Build an image using the Dockerfile at current location
# Tag the final image with [name] (e.g. *nginx*)
# Example: sudo docker build -t [name] .
sudo docker build -t memcached_img .
Примечание. Чтобы узнать больше о файлах Docker, ознакомьтесь с нашей статьей: Объяснение Docker: использование файлов Docker для автоматизации создания образов.
Обзор команд Dockerfile
Добавлять
Скопируйте файл с хоста в контейнер
CMD
Установите команды по умолчанию для выполнения или передачи в ENTRYPOINT
ВХОДНАЯ ТОЧКА
Установите приложение точки входа по умолчанию внутри контейнера
ENV
Установите переменную среды (например, «ключ=значение»)
РАЗОБЛАЧАТЬ
Выставить порт наружу
ОТ
Установите базовое изображение для использования
ОБСЛУЖИВАТЕЛЬ
Установите данные автора/владельца Dockerfile
БЕГАТЬ
Запустите команду и зафиксируйте образ конечного результата (контейнера)
ПОЛЬЗОВАТЕЛЬ
Настройте пользователя для запуска контейнеров из образа
ОБЪЕМ
Смонтировать каталог с хоста в контейнер
РАБОЧИЙКАТАЛОГ
Установите каталог для выполнения директив CMD.
Создание Dockerfile
Поскольку файлы Docker представляют собой простые текстовые документы, их создание означает запуск вашего любимого текстового редактора и написание команд, которые должны выполняться докером для создания образа. После того, как вы начнете работать с файлом, продолжайте добавлять все содержимое ниже (одно за другим), прежде чем сохранять окончательный результат.
Примечание. Вы можете узнать, как будет выглядеть окончательный файл Dockerfile, в конце этого раздела.
Давайте создадим пустой Dockerfile с помощью текстового редактора nano:
nano Dockerfile
Нам нужно, чтобы все инструкции (команды) и директивы были перечислены последовательно. Однако все начинается со сборки базового образа (задается командой FROM).
Давайте определим назначение нашего Dockerfile и объявим используемый базовый образ:
############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu
# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name
После этого начального блока команд и объявлений мы можем начать с перечисления инструкций по установке Memcached.
# Update the default application repository sources list
RUN apt-get update
# Install Memcached
RUN apt-get install -y memcached
Установите порт по умолчанию, который будет доступен за пределами контейнера:
# Port to expose (default: 11211)
EXPOSE 11211
Установите команду выполнения по умолчанию и точку входа (например, демон Memcached):
# Default Memcached run command arguments
CMD ["-u", "root", "-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
ENTRYPOINT memcached
Окончательный файл Docker
############################################################
# Dockerfile to run Memcached Containers
# Based on Ubuntu Image
############################################################
# Set the base image to use to Ubuntu
FROM ubuntu
# Set the file maintainer (your name - the file's author)
MAINTAINER Maintaner Name
# Update the default application repository sources list
RUN apt-get update
# Install Memcached
RUN apt-get install -y memcached
# Port to expose (default: 11211)
EXPOSE 11211
# Default Memcached run command arguments
CMD ["-m", "128"]
# Set the user to run Memcached daemon
USER daemon
# Set the entrypoint to memcached binary
ENTRYPOINT memcached
После того, как все записано внутри Dockerfile, сохраните его и выйдите, нажав CTRL+X, а затем Y.
Используя этот Dockerfile, мы готовы начать работу с докеризированными контейнерами Memcached!
Создание образа Docker для контейнеров Memcached
Теперь мы можем создать наш первый образ Memcached, следуя инструкциям по использованию, описанным в разделе «Основы Dockerfile».
Выполните следующую команду, чтобы создать образ с тегом «memcached_img»:
sudo docker build -t memcached_img .
Примечание. Не забудьте завершающий .
, чтобы docker мог найти Dockerfile
.
Запуск докеризированных контейнеров Memcached
Теперь очень просто создать любое количество идеально изолированных и автономных экземпляров memcached благодаря изображению, которое мы получили в предыдущем разделе. Все, что нам нужно сделать, это создать новый контейнер с помощью docker run
.
Создание установленного контейнера Memcached
Чтобы создать новый контейнер, используйте следующую команду, изменив ее в соответствии с вашими требованиями, следуя этому примеру:
# Example: sudo docker run -name [container name] -p [port to access:port exposed] -i -t [memcached image name]
sudo docker run -name memcached_ins -d -p 45001:11211 memcached_img
Теперь у нас будет док-контейнер с именем \memcached_ins, доступный через порт 45001, запустите
, используя наш образ с тегом \memcached_img, который мы создали ранее.
Ограничение памяти для контейнера Memcached
Чтобы ограничить объем памяти, который может использовать процесс контейнера докеров, просто установите флаг -m [объем памяти]
с ограничением.
Чтобы запустить контейнер с памятью, ограниченной 256 МБ:
# Example: sudo docker run -name [name] -m [Memory (int)][memory unit (b, k, m or g)] -d (to run not to attach) -p (to set access and expose ports) [image ID]
sudo docker run -name memcached_ins -m 256m -d -p 45001:11211 memcached_img
Чтобы подтвердить лимит памяти, вы можете проверить контейнер:
# Example: docker inspect [container ID] | grep Memory
sudo docker inspect memcached_ins | grep Memory
Примечание. Приведенная выше команда извлекает информацию, связанную с памятью, из выходных данных проверки. Чтобы просмотреть всю необходимую информацию о вашем контейнере, выберите sudo docker inspect [идентификатор контейнера]
.
Тестирование контейнера Memcached
Есть несколько способов попробовать только что созданный работающий контейнер (контейнеры) Memcached. Для этого мы будем использовать простое приложение Python CLI. Тем не менее, вы можете просто перейти к работе со своим приложением, используя кэширующие надстройки, фреймворки или библиотеки.
Убедитесь, что на вашем хосте есть необходимые библиотеки для Python/Memcached:
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install -y python-pip
pip install python-memcached
Давайте создадим простой скрипт Python с именем \mc.py, используя nano:
nano cache.py
Скопируйте и вставьте нижеследующее (не требующее пояснений) содержимое внутрь:
# Import python-memcache and sys for arguments
import memcache
import sys
# Set address to access the Memcached instance
addr = 'localhost'
# Get number of arguments
# Expected format: python cache.py [memcached port] [key] [value]
len_argv = len(sys.argv)
# At least the port number and a key must be supplied
if len_argv < 3:
sys.exit("Not enough arguments.")
# Port is supplied and a key is supplied - let's connect!
port = sys.argv[1]
cache = memcache.Client(["{0}:{1}".format(addr, port)])
# Get the key
key = str(sys.argv[2])
# If a value is also supplied, set the key-value pair
if len_argv == 4:
value = str(sys.argv[3])
cache.set(key, value)
print "Value for {0} set!".format(key)
# If a value is not supplied, return the value for the key
else:
value = cache.get(key)
print "Value for {0} is {1}.".format(key, value)
Нажмите CTRL+X и подтвердите с помощью Y, чтобы сохранить и закрыть.
Тестирование экземпляра docker memcached с помощью приведенного выше сценария с вашего хоста:
# Example: python cache.py [port] [key] [value]
python cache.py 45001 my_test_key test_value
# Return: Value for my_test_key set
# See if the key is set:
python cache.py 45001 my_test_key
# Return: Value for my_test_key is test_value.
Полный набор инструкций по установке и использованию docker можно найти в документации по docker на docker.io.