CEX.io

вторник, 6 октября 2015 г.

Виртуальные изолированные контейнеры Docker, Kubernetes, Rocket (rkt). Ваш проект из коробки.

     Великолепное решение для разработчиков приложений и облачных платформ, т.к. позволяет: существенно повысить безопасность, ускорить разработку, экономить ресурсы и т.д.
Другими словами: виртуализация на уровне системы.

Сайты проектов:
Docker может работать на Linux (разные платформы),
на Windows работает внутри виртуальной машины например VirtualBoxVMWareQEMU

Основные компоненты docker:
  • ядро системы, утилиты
  • реестр образов (подготовленные образы систем)
  • образы виртуальных систем (images),виртуальных дисков (volumes)
  • контейнеры

Быстрый старт:

установка на Debian (Jessie 8.0 64-bit)

1. в файл sources.list добавьте строку, указанную ниже:
(или добавьте новый файл с расширением ".list" в директорию /etc/apt/sources.list.d/ , другие зеркала можно найти тут: https://www.debian.org/mirror/list

deb http://http.debian.net/debian jessie-backports main

установка:
$ sudo apt-get update
$ sudo apt-get install docker.io

проверка работоспособности:
$ sudo docker run --rm hello-world

должно отобразится информационное сообщение, и контейнер должен завершить работу

удаление (если потребуется):

$ sudo apt-get purge docker-io
$ sudo apt-get autoremove --purge docker-io
$ rm -rf /var/lib/docker # реестр , контейнеры, образы удаляются вручную

запуск docker должен происходить с правами root,
т.е. нужно добавлять $ sudo docker в том случае, если не указано

Часто используемые команды:

работа с метаданными:

# просмотр меток (labels) контейнеров, образов с ID
$ docker inspect ID # например docker inspect 1fa6e0f0c271

# список работающих контейнеров с меткой "label=com.example.is-beta"
$ docker ps --filter "label=com.example.is-beta"

# список работающих контейнеров с меткой "color" и значением "blue"
$ docker ps --filter "label=color=blue"

# список всех образов от поставщика / "vendor" "ACME"
$ docker images --filter "label=vendor=ACME"

# метки для основного сервиса / "daemon"
$ docker daemon \
       --dns 8.8.8.8 \
       --dns 8.8.4.4 \
       -H unix:///var/run/docker.sock \
       --label com.example.environment="production" \
       --label com.example.storage="ssd"

# вывести метаданные сервиса / "daemon"
$ docker -D info


# поиск образа в реестре (например "centos" или др.)
$ docker search centos

# загрузить образ (например "centos" или др.) из реестра
$ docker pull centos

# получить список установленных образов с тегами
$ docker images

# получить список всех образов
# "-a" - все образы
$ docker images -a

# получить список ID образов
$ docker images -a -q

# удалить образ c IMAGE_ID
$ docker rmi IMAGE_ID

# форсировать удаление образа c IMAGE_ID
# "-f" - force
$ docker rmi -f IMAGE_ID

# сохранение образов в архиве
$ docker save busybox > busybox.tar.gz
$ docker save --output=busybox.tar.gz busybox
$ docker save -o busybox.tar.gz busybox
$ docker save -o ubuntu.tar.gz ubuntu:lucid ubuntu:saucy

# восстановление образов из архива
# поддерживаются форматы: gzip, bzip, и xz
$ docker load < busybox.tar.gz
$ docker load --input=ubuntu.tar.gz
$ docker load -i ubuntu.tar.gz


# docker import: для сохранения владельцев и прав
# на файлы и папки, как и в исходной папке/архиве
# поддерживаемые форматы архивов:
# .tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz
# "--change" - изменения при импорте,
# поддерживаются следующие инструкции:
# CMD|ENTRYPOINT|ENV|EXPOSE|ONBUILD|USER|VOLUME|WORKDIR
$ docker import --change "ENV DEBUG true" exampleimage.tgz

# по умолчанию владельцем будет root:
# для смены владельца требуется указать USER my_user_name
# перед командами COPY, ADD
# а также менять права в командах RUN chmod xxx file
# docker build

# минимальный базовый образ: scratch (зарезервированное имя)
# создать свой базовый образ минимального размера: empty
$ tar cv --files-from /dev/null | docker import - empty

# создать образ из текущей папки
# в папке должен быть файл с именем Dockerfile
$ docker build --no-cache -t TARGET_IMAGE_NAME .

# создать образ описанный в Dockerfile
# команды ADD внутри Dockerfile работают, только,
# если ссылаются на внешние файлы с URL
# игнорируются директивы -f, --file
$ docker build -t TARGET_IMAGE_NAME - < Dockerfile

# создать образ из архива image.tar.gz
# поддерживаемые форматы архивов: bzip2, gzip и xz
# "-f" - указывает альтернативное имя Dockerfile внутри контекста
# "--rm=true" - удалить промежуточные контейнеры,
# после успешной сборки
# "--force-rm=true" - всегда удалять промежуточные контейнеры
$ docker build --no-cache -f Dockerfile -t TARGET_IMAGE_NAME - < image.tar.gz

# создать образ из git репозитория
$ docker build github.com/creack/docker-firefox
$ docker build https://github.com/docker/rootfs.git#container:docker


в квадратный скобках необязательные параметры, напр. [команда]

# список работающих контейнеров
$ docker ps

# список всех контейнеров (+остановленные)
$ docker ps -a

# список всех контейнеров с не усеченными CONTAINER_ID
$ docker ps -a --no-trunc

# список всех ID контейнеров (+остановленные/stopped)
$ docker ps -a -q

# сохранение текущего состояния контейнера
$ docker export CONTAINER_ID > latest.tar.gz
$ docker export red_panda > latest.tar.gz
$ docker export --output="latest.tar" red_panda
$ docker export -o "latest.tar" red_panda

# запустить контейнер с именем container_name
$ docker run container_name [команда]

# запустить контейнер с именем container_name +консоль
# "-i" - интерактивно, "-t" - использовать псевдо-TTY
$ docker run -it container_name [команда]

# остановить контейнер c CONTAINER_ID (результат docker ps)
$ docker stop CONTAINER_ID

# запустить контейнер c CONTAINER_ID (результат docker ps)
$ docker start CONTAINER_ID

# перезапустить контейнер c CONTAINER_ID (результат docker ps)
$ docker restart CONTAINER_ID

# отправить сигнал SIGKILL в контейнер (прервать работу)
# вместо CONTAINER_ID можно использовать результат
# возвращаемый при запуске контейнера в фоне
# JOB=$(docker run -d ubuntu /bin/sh -c "while true; \
do echo 'Привет Мир!'; sleep 1; done")
# docker kill $JOB
# $JOB можно использовать с командами: start, stop, restart, kill, rm
$ docker kill CONTAINER_ID

# запустить контейнер в фоне
# "-d" - запуск в фоне
$ docker run -d -t container_name [команда]

# запустить команду внутри работающего контейнера c CONTAINER_ID
# "-u" запустить от указанного пользователя (uid или name)
$ docker exec -u root -it CONTAINER_ID bash

# удалить остановленный контейнер/stopped c CONTAINER_ID
$ docker rm CONTAINER_ID

# удалить все неработающие контейнеры:
$ docker rm $(docker ps -a -q)

Комментариев нет: