Поиск по сайту:

Объяснение Docker: как создавать контейнеры Docker с запущенным Memcached


Статус: устарело

Эта статья устарела и больше не поддерживается.

Причина

Методы, описанные в этой статье, устарели и могут больше не отражать лучшие практики Docker.

Смотрите вместо этого

  • Экосистема Docker: введение в общие компоненты
  • Официальный контейнер memcached на Docker Hub

Введение

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

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

В этой статье DigitalOcean, особенно имея в виду тех, кто размещает несколько веб-приложений (например, несколько экземпляров WordPress, приложения Python и т. д.), мы собираемся создать образы докеров, чтобы быстро запустить (по запросу) контейнеры Memcached, которым можно управлять индивидуально. Эти контейнеры, хранящиеся и защищенные в своих собственных средах, будут работать с размещенным приложением, чтобы помочь им стать лучше и быстрее.

Глоссарий

1. Докер вкратце

2. Кратко о Memcached

3. Установка Docker на Ubuntu

4. Основные команды Docker

  1. Запуск демона Docker и использование CLI
  2. команды докера

5. Начало работы с созданием изображений Memcached

  1. Краткий обзор: что такое Dockerfiles?
  2. Обзор команд Dockerfile
  3. Создание файла Docker
  4. Окончательный файл Docker
  5. Создание образа Docker для контейнеров Memcached

6. Запуск докеризированных контейнеров Memcached

  1. Создание установленного контейнера Memcached
  2. Ограничение памяти для контейнера Memcached
  3. Тестирование контейнера 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.

Прислано: