Skip to content

Latest commit

 

History

History
441 lines (263 loc) · 8.66 KB

File metadata and controls

441 lines (263 loc) · 8.66 KB
layout slide
title Docker

Проблемы

  • Неудачи при попытке установить все зависимое ПО, при этом не "сломав" ничего локально
  • Непонимание, как запустить приложение
  • Несоответствие локальной инфраструктуры с удаленной
  • Поддержка инфраструктуры приложения на удаленных серверах
  • Масштабирование приложения на production окружении

--

Решение

logo.jpeg

Упаковываваем и запускаем ваше ПО со всеми его зависимостями в небольших изолированных средах, называемых контейнерами

--

Преимущества

  • Независимость от архитектуры сервера

  • Удобное управление версиями и зависимостями

  • Простота масштабирования

  • Оптимальное использование ресурсов

  • Инфраструктура как код

--

Недостатки

  • Производительность

  • Усложнение архитектуры

  • Непростая настройка и поддержка

  • Плохая обратная совместимость


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

Docker строится на контейнеризации приложений в изолированной среде.

logo.jpeg

--

Образы и контейнеры

Образ — это пакет, который включает в себя все необходимые для запуска приложения

Контейнер — это экземпляр образа вашего приложения во время выполнения.


Виртуальная машина и Docker контейнер

--

Виртуальная машина

docker-vm

Виртуальной машина предоставляет среде больше ресурсов, чем требуется большинству приложений

--

Docker контейнер

docker-container

Контейнер работает в Linux и разделяет ядро HostOS с другими контейнерами. Он запускается в отдельном процессе, занимая минимум памяти


Образ и слои

image-layer

Dockerfile состоит из команд (RUN, ENTRYPOINT, CMD и другие).

Каждая команда создание нового слоя при сборке образа.

Структура связей между слоями в Docker - иерархическая.

--

dockerfile.png

--

Dockerfile

dockerfile.png

Это инструкция для сборки образ вашего ПО

--

Контейнер и слои

conainers-layer

Когда запускается контейнер, он создает еще один слой поверх образа

Только слой контейнера доступен для записи

--

Контейнеры и волумы

volumes.png

Docker volume – папка на HostOS, "примонтированная" к файловой системе контейнера


development

--

docker-components

Docker Compose - это инструмент для определения и запуска многоконтейнерных приложений Docker.

--

Возможности Compose:

  • Запуск нескольких изолированных сред на одном хосте

  • Настройка volumes при создании контейнеров

  • Удобный менеджмент запущенных контейнеров

  • Удобная конфигурация контейнеров и коммуникации между ними

--

docker-compose.yml

С Compose вы используете файл YAML для настройки сервисов(контейнеров) вашего приложения и одну команду для создания и запуска всех сервисов из этого файла конфигурации

docker-compose-example


Docker commands

--

Pull image from DockerHub


docker pull hello-world

--

Run image. If image not exists locally then pull it from DockerHub


docker run hello-world

--

Build image from the Dockerfile


docker build -t <image_tag> - < Dockerfile

and then you can run it in interactive mode:

docker run -it <image_tag> bash

or run in deamon mode

docker run -d <image_tag> rails s

or just run, execute command and stop

docker run <image_tag> uname -a

--

Display running containers


docker ps

If you want to see all containers - live and dead, so just add -a to commant:

docker ps -a

--

Execute command in running container

You can run command and get output:

docker exec <container_id or name> some command

or run command in interactive mode:

docker exec -it <container_id or name> rails c

--

Managing images


List images


docker images ls

Remove image


docker rmi <image_id or tag>

--

Managing volumes


List volumes


docker volume ls

Create volume


docker volume create <name>

Remove volume


docker volume rm <name>

--

Delete everything (containers, images, volumes, networks) in one command


docker system prune -af

Be very careful with this command!

--

Inspect container logs


docker logs <container_id or name>

--

Inspect container metadata


docker inspect <container_id or name>

Docker Compose commands

--

Build images


docker-compose build

--

Run containers


docker-compose up

--

Build and run containers


docker-compose up --build

--

Stop all containers


docker-compose down

Popular questions

--

How to seed DB in container?


Let's image that you already have running containers, but empty database, so to seed you just need to execute one command:

docker exec -it <rails_container_id> rake db:seed

--

How to debug dockerized application?


Just attach to the running rails container

docker attach <rails_container_id>

and magic...


Usefull links

--

Documentation:

DockerHub

Docker build docs

Docker run docs

Docker volume docs

Docker compose docs

Docker security docs

--

Courses

Official docker course

Docker interactive course

--

Utils

A tool for exploring a docker image, layer contents, and discovering ways to shrink the size of your Docker/OCI image:

Dive


The Docker Bench for Security is a script that checks for dozens of common best-practices around deploying Docker containers in production:

Docker Bench Security


VScode extension

Link

--

Materials from this lecture

https://github.com/bl0rch1d/docker_lecture_materials


One more thing...


git clone https://github.com/bl0rch1d/docker_lecture_materials.git

cd docker_lecture_materials

docker build -t sw_movie - < ./dockerfiles/simple.Dockerfile

docker run -it sw_movie telnet towel.blinkenlights.nl