Виртуализация

средствами

DOCKER

Что такое Docker?

КРОССВОРД ОТ ЮРИЯ ШЕВЧУКА

Docker

Docker is open platform for developers and sysadmins to build, ship and run distributed applications

Зачем?

Что дает нам Docker?

  • easy deploy
  • быстрая переносимость
  • изоляция контейнеров
  • выделение ресурсов
  • собрал один раз - запустил везде (!)

Что внутри docker-a?

Docker architecture

Docker architecture

  1. В основе лежит cgroups (в ядре Linux с версии 2.6.24)​​

    • механизм ограничения и изоляции выч. ресурсов для исп. гр. процессов

  2. Изоляция пространств имён (namespaces)
  3. Файловая система AuFS

    • альтернатива UnionFS, но более быстрая и стабильная

  4. LXC (Linux Containers)

    • система виртуализации на уровне OS.
      аналог FreeBSD jail и Solaris Containers.

Образы Docker

Пример образов (images)

Отличия Docker от VMs

Отличия Docker от VMs

  • Контейнеры запускаются в той-же OS, что и хост
  • AuFS в качестве файловой системы
  • Ресурсы между хостом и контейнером расшарены
  • Быстрый запуск (секунды для контейнера против минут VM)
  • VM живет вечно, контейнер - запускается и удаляется

Docker очень простой

Запустить Ubuntu и выполнить в ней echo

docker run ubuntu echo "hello from Ubuntu"

 

 

Запустить CentOS с башем и подключиться к его терминалу

docker run -ti CentOS /bin/bash

Очень-очень простой

Запустить nodejs-app контейнер в бэкграунде и разрешить доступ к нему по 80-му порту

 

docker run -p 80:80 -d nodejs-app

Как создать/сохранить образ

Взять готовый с репозитория и изменить

docker pull, docker commit

 

Собрать из Dockerfile на основе существующего

docker build

 

Создать новый с нуля

docker create, docker import

 

Сохранять и загружать

docker save image > /fdd/image.tar

docker load/fdd/image.tar

Пример Dockerfile

FROM ubuntu:12.04

MAINTAINER Slava Konashkov <slava.konashkov@gmail.com>

RUN apt-get update && \
    apt-get install -y apache2 && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]

Docker Hub

Почти как github, только для образов

 

  • Бесплатные public репозитории + 1 private
  • docker pull ubuntu
  • docker push betterUbuntu

Docker Registry

Локальный репозиторий для образов

 

  • Устновка на свой/клиентский сервер
  • docker pull registry_host:5000/ubuntu
  • docker push registry_host:5000/betterUbuntu

Deploy контейнера

На сервере собрки:

  1. docker build -t web_service web/
  2. docker tag web_service registry:5000/web_service
  3. docker push registry:5000/web_service

 

На docker host:

docker run -d registry:5000/web_service

Как это работает на PROD?

Как это масштабировать?

Рубрика "А вот если бы!?."

 ________________________________________
/ Q: Why don't Scotsmen ever have coffee \
| the way they like it? A: Well, they    |
| like it with two lumps of sugar. If    |
| they drink                             |
|                                        |
| it at home, they only take one, and if |
| they drink it while                    |
|                                        |
\ visiting, they always take three.      /
 ----------------------------------------
  \
   \   \_\_    _/_/
    \      \__/
           (oo)\_______
           (__)\       )\/\
               ||----w |
               ||     ||
[!1998]|23:21:33|slava:~$ ssh root@192.168.0.35
root@192.168.0.35's password: 
Last login: Thu Oct 29 08:27:14 2015 from 192.168.1.50
root@SYS005056ada9d0:ssh:~# docker
-bash: docker: command not found

root@SYS005056ada9d0:ssh:~# yum
-bash: yum: command not found

root@SYS005056ada9d0:ssh:~# gcc
-bash: gcc: command not found

root@SYS005056ada9d0:ssh:~# rpm -i docker-1.7.1-108.el7.centos.x86_64.rpm
warning: docker-1.7.1-108.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
	/bin/bash is needed by docker-1.7.1-108.el7.centos.x86_64
	/bin/sh is needed by docker-1.7.1-108.el7.centos.x86_64
	device-mapper-libs >= 7:1.02.90-1 is needed by docker-1.7.1-108.el7.centos.x86_64
	docker-selinux >= 1.7.1-108.el7.centos is needed by docker-1.7.1-108.el7.centos.x86_64
	libc.so.6()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libc.so.6(GLIBC_2.14)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libc.so.6(GLIBC_2.2.5)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libc.so.6(GLIBC_2.4)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libdevmapper.so.1.02()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libdevmapper.so.1.02(Base)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libpthread.so.0()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libpthread.so.0(GLIBC_2.2.5)(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	libsqlite3.so.0()(64bit) is needed by docker-1.7.1-108.el7.centos.x86_64
	lvm2 >= 2.02.112 is needed by docker-1.7.1-108.el7.centos.x86_64
	rtld(GNU_HASH) is needed by docker-1.7.1-108.el7.centos.x86_64
	selinux-policy >= 3.13.1-23 is needed by docker-1.7.1-108.el7.centos.x86_64
	systemd is needed by docker-1.7.1-108.el7.centos.x86_64
	xfsprogs is needed by docker-1.7.1-108.el7.centos.x86_64
	xz is needed by docker-1.7.1-108.el7.centos.x86_64
root@SYS005056ada9d0:ssh:~#

ВСЕ! Вопросы?

Виртуализация

By Slava Konashkov

Виртуализация

  • 368