СУБД. Docker

СУБД
Навроцкий Артем
Docker

Docker

Почему Docker?

Как проходила сдача семестровых работ раньше?

Почему Docker?

В чем проблема?

Почему Docker?

Что делать?

Почему Docker?

Решение:

Docker

Docker

Программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы.

Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.

Виды виртуализации

Динамическая трансляция (KVM, VMware, VirutalBox)
При динамической (бинарной) трансляции проблемные команды гостевой операционной системы перехватываются гипервизором. После того как эти команды заменяются на безопасные, происходит возврат управления гостевой системе.
Паравиртуализация (Xen)
Техника виртуализации, при которой гостевые операционные системы подготавливаются для исполнения в виртуализированной среде, для чего их ядро незначительно модифицируется.
Контейнерная виртуализация (OpenVZ, LXC, Docker)
Метод виртуализации, при котором ядро операционной системы поддерживает несколько экземпляров пространства пользователя, вместо одного.

Производительность (TCP, CPU cycles/byte)

Производительность (TCP)

Производительность (IO)

Производительность (IO)

Dockerfile

FROM ubuntu:18.04
LABEL maintainer="Artem V. Navrotskiy"
RUN apt-get -y update
RUN apt-get install -y openjdk-8-jdk-headless
ENV WORK /opt/tech-db-hello
ADD java-spring/ $WORK/java-spring/
ADD common/ $WORK/common/
WORKDIR $WORK/java-spring
RUN ./gradlew assemble
EXPOSE 5000
CMD java -Xmx300M -Xmx300M -jar \
    $WORK/java-spring/build/libs/java-spring.jar

Dockerfile

Сборка:

docker build --no-cache -t web

Результат сборки:

docker history web

IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
142e08487e9f        3 minutes ago       /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "java    0 B                 
89554758e753        3 minutes ago       /bin/sh -c #(nop)  EXPOSE 5000/tcp              0 B                 
5bf1ec77528d        3 minutes ago       /bin/sh -c ./gradlew assemble                   209.4 MB            
f627d2a79e3b        5 minutes ago       /bin/sh -c #(nop)  WORKDIR /opt/tech-db-hello   0 B                 
c86551883943        5 minutes ago       /bin/sh -c #(nop) ADD dir:f6c361eff4dcd18df9a   3.968 MB            
854f85a7870a        5 minutes ago       /bin/sh -c #(nop) ADD dir:b3d037b5a457bd71162   23.65 MB            
92a00899fc26        5 minutes ago       /bin/sh -c #(nop)  ENV WORK=/opt/tech-db-hell   0 B                 
329813b55a21        5 minutes ago       /bin/sh -c apt-get install -y openjdk-8-jdk-h   186.1 MB            
7c973a535a50        5 minutes ago       /bin/sh -c apt-get -y update                    39.76 MB            
f0c74fcd39ff        5 minutes ago       /bin/sh -c #(nop)  LABEL maintainer="Artem V.   0 B
104bec311bcd        9 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0 B                 
<missing>           9 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'doc   7 B                 
<missing>           9 weeks ago         /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/   1.895 kB            
<missing>           9 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0 B                 
<missing>           9 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /u   745 B               
<missing>           9 weeks ago         /bin/sh -c #(nop) ADD file:7529d28035b43a2281   128.9 MB  

Работа с образами

Список образов:

docker image ls

Удалить образ из локального хранилища:

docker image rm alpine:3.4

Удалить не используемые образы:

docker image prune
docker image prune --all --filter until=4h

Работа с томами

Список томов:

docker volume ls

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

docker volume prune

Чистка одной командой

Где место, Лебовски?

docker system df

Удалить кэш сборки

docker builder prune

Удалить всё, что не используется

docker system prune

Работа с контейнером

Запуск:

docker run
          --rm # удалить контейнер после остановки
           -it # подключить контейнер к терминалу
            -d # запуск в фоновом режиме
    --name web # имя контейнера
    -p 5000:80 # опубликовать на 5000-ом порту 80-ый
               # порт контейнера
-v ~/dev:/code # использовать директорию внутри контейнера
    alpine:3.4 # имя запускаемого образа
       /bin/sh # команда, запускаемая внутри контейнера

Работа с контейнером

Остановка (SIGTERM):

docker stop web

Остановка (SIGKILL):

docker kill web

Список запущенных контейнеров:

docker ps

Работа с контейнером

Удалить все остановленные контейнеры:

docker container prune

Запустить временный контейнер:

docker run --rm -it ubuntu

Запустить терминал внутри контейнера:

docker exec -it web bash

Посмотреть вывод контейнера:

docker logs --tail 100 web

Полезные ссылки

Навроцкий Артем
E-mail: bozaro@yandex.ru
Спасибо за внимание!