6.1 KiB
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