DOCKER Flashcards
Что такое Doker, какую проблему решает?
Докер - средство упаковки, доставки и запуска приложений.
Контейнер имеет единый интерфейс, что делает его незаввисимым от содержимого (ЯП, …)
Doker image - готовое к запуску приложение. образы наслаиваются друг на друга
Doker container - работающее приложение, созданное на базе образа, контейнеров на основе образа может быть сколько угодно.
Контейнер никак не влияет на образ.
Работает по принципу контейнеризации, прийдя на смену виртуализации.
Виртуализация - создание несколих виртуальных машин (со своей “гостевой” ОС) на одном физическом сервере. Приложение развернуто внутри такой машины изолированно, и если машина переедет на другой физ. сервер - приложение даже не заметит.
Контейнеризация тоже создает изолированную виртуальную среду.
Контейнер - файл (image / образ), содержащий приложение, заввисимости и инструкции.
Работа контейнера - это выполнение образа.
В итоге докер - это единый процесс основной ОС сервера, он не имеет своей полноценной ОС.
Таким образом
- мы экономим ресурсы, используя ядро ОС хоста, не устанавливая отдельную ОС на каджую виртуальную машину.
- экономим время на деплой, особенно если у нас микросервисы.
- память под процесс выделяется динамически, и контейнер может потреблять ее то меньше, то больше, а под виртуальный сервер память выделяется заранее и с запасом.
- контейнер легче перенести или масштабировать
Что такое dockerfile, docker-compose?
dockerfile - файл без расширения, содержащий инструкции для создания образа контейнера.
метафорический рецепт.
docker-compose - yaml файл, на основе которого докер настроит связи между контейнерами.
Doker image vs Doker container?
image - read-only шаблон контейнера, созданный на основе dockerfile и содержащий все нужные зависимости, описывает как докеру создавать контейнер.
Каждая команда dockerfile - новый слой образа. Поэтому поэтому размещать слои надо от наименее к наиболее изменяемым.
В образе контейнера Docker содержится образ базовой операционной системы, код приложения, библиотеки, от которого оно зависит. Всё это скомпоновано в виде единой сущности, на основе которой можно создать контейнер.
container - готовое к запуску приложение в котором выполняется программа.
Как залезть в работающий Docker контейнер через командную строку?
docker exec -it container_name bash
docker exec -it - вызов виртуального терминала докера
Чтобы залезть в работающий Docker контейнер через командную строку, необходимо выполнить следующие шаги:
- Откройте терминал и введите команду docker ps для получения списка запущенных контейнеров. Вы увидите список контейнеров со статусом “Up” (запущен).
- Найдите ID или имя контейнера, в который вы хотите зайти.
- Введите команду docker exec -it <имя> /bin/bash. Эта команда запустит интерактивную оболочку Bash внутри контейнера.</имя>
- Теперь вы можете выполнять любые команды внутри контейнера через интерактивную оболочку.
- Чтобы выйти из контейнера, введите команду exit в терминале контейнера.
Примечание: Если образ контейнера не содержит утилиту Bash, замените /bin/bash на другую подходящую оболочку в вашем образе (например, /bin/sh).
dockerfile java example
Вот пример Dockerfile для приложения на Java:
# Использовать базовый образ с Java 8 FROM openjdk:8-jdk-alpine Установить директорию приложения WORKDIR /app Скопировать JAR файл приложения в контейнер COPY target/my-app.jar /app/my-app.jar Указать порт, на котором будет запущено приложение EXPOSE 8080 Запустить приложение CMD ["java", "-jar", "my-app.jar"]
Этот Dockerfile использует образ OpenJDK 8 для запуска приложения на Java. Первая команда FROM указывает Docker, что мы хотим использовать образ OpenJDK 8 в качестве базового.
Далее WORKDIR устанавливает рабочую директорию внутри контейнера, куда мы скопируем JAR файл приложения.
Затем с помощью команды COPY мы копируем файл my-app.jar внутрь контейнера.
Команда EXPOSE указывает порт, на котором приложение будет доступно.
И, наконец, CMD запускает приложение в контейнере с помощью команды java -jar my-app.jar.
Это простой пример Dockerfile для приложения на Java. Реальные приложения могут иметь более сложную структуру и конфигурацию, но основы остаются примерно такими же.