camp-docker-basics/presentation.md
2018-08-30 20:22:24 +03:00

6.1 KiB
Raw Permalink Blame History

title: Docker basics hands-on class: animation-fade layout: true

.bottom-bar[ {{title}} ]


class: impact

{{title}}


Что такое Docker

--

Инфраструктура для

  • упаковки

  • хранения

  • доставки

  • запуска

  • оркестрации

приложений


На чем это строится

--

  • Контейнеризация - виртуализация на уровне операционной системы Linux

  • Контейнеры используют общее ядро операционной системы

  • Изоляция с помощью cgroups и namespaces


Основные понятия

--

  • Container

  • Image

  • Layer

  • Docker host

  • Docker registry


class: impact

Практика


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

--

Запустить ubuntu контейнер и зайти в bash в интерактивном режиме:

$ docker run -it ubuntu /bin/bash

--

То же, но примонтировав текущую хостовую дирректорию, причем, по одноименному пути:

$ docker run --rm -i -t -v "$PWD":"$PWD" --workdir "$PWD" ubuntu /bin/bash

--

Выполнить команду в новом процессе уже запущенного контейнера, например интерактивно зайти в новый bash шелл:

$ docker exec -it <container id | name> /bin/bash

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

Посмотреть все запущенные контейнеры:

$ docker ps

--

Посмотреть все созданные контейнеры, включая незапущенные:

$ docker ps -a

Удалить контейнер (флаг -f: forse удаление, даже запущенного контейнера):

$ docker rm <container id | name>

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

--

Посмотреть все образы на локальном docker host:

$ docker images
REPOSITORY    TAG       IMAGE ID        CREATED       SIZE
ubuntu        latest    16508e5c265d    7 days ago    84.1MB

--

Скачать новый образ:

$ docker pull hello-world:latest
$ docker images
REPOSITORY    TAG       IMAGE ID        CREATED       SIZE
ubuntu        latest    16508e5c265d    7 days ago    84.1MB
hello-world   latest    2cb0d9787c4d    7 weeks ago   1.85kB

--

Удалить докер образ (флаг -f: forse удаление):

$ docker rmi

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

Dockerfile. Cборка и тестрование приложения

--

В дирректории с проектом создаем Dockerfile

--

# Compilaton and testing
FROM erlang:21.0 as build

--

COPY ./ /build
WORKDIR /build

--

RUN rebar3 compile

--

RUN rebar3 do eunit, ct

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

Билд образа

--

$ docker build ./
Sending build context to Docker daemon  1.859MB
Step 1/11 : FROM erlang:21.0 as build
 ---> 51aeeaecddeb

 ...
Removing intermediate container 595f1fdee99c
 ---> f5b5d971f2e0
Successfully built f5b5d971f2e0
  • ./ - путь к дирректории с Dockerfile.

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

Dockerfile. Сборка и упаковка приложения

--

В том же Dockerfile:

RUN rm -rf _build/default/rel
RUN rebar3 release

--

# Make an app image
FROM erlang:21.0

--

WORKDIR /opt/dummy_docker
COPY --from=build /build/_build/default/rel/dummy_docker .

--

CMD bin/dummy_docker foreground

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

Билд образа. Финальный

--

$ docker build --squash -t dummy_docker:<tag> ./

Sending build context to Docker daemon  1.859MB
Step 1/11 : FROM erlang:21.0 as build
 ---> 51aeeaecddeb

...
Step 11/11 : CMD bin/dummy_docker foreground
 ---> Running in 94d00e80215c
Removing intermediate container 94d00e80215c
 ---> 87ad77b501bd
Successfully built 3d10516ba341
Successfully tagged dummy_docker:2018-08-30-19-15-15
  • Таймстэмп в качестве тэга: $(date +%Y-%m-%d-%H-%M-%S)

Работа с зависимостями

docker-compose.yml

В дирректории с проектом создаем docker-compose.yml

--

version: "3"

services:
  dummy:
    # build from Dockerfile
    build: ./
    depends_on:
      - db
  db:
    # pull and start from an image
    image: redis:4.0


Работа с зависимостями

Запуск

$ docker-compose up -d

--

$ docker-compose ps
        Name                     Command           State   Ports
---------------------------------------------------------------------
dummy_docker_db_1     docker-entrypoint.sh redis ...  Up     6379/tcp
dummy_docker_dummy_1  /bin/sh -c bin/dummy_docke ...  Up

Работа с зависимостями

Связность и остановка

Docker compose обеспечивает связь между контейнерами по service имени в docker-compoe.yml

$ docker exec -it dummy_docker_dummy_1 ping db
PING db (172.23.0.2) 56(84) bytes of data.
64 bytes from dummy_docker_db_1.dummy_docker_default (172.23.0.2): icmp_seq=1 ttl=64 time=0.093 ms
^C
--- db ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.093/0.093/0.093/0.000 ms

--

$ docker-compose down

class: impact

Спасибо!