2.2 Написание и лучшие практики Dockerfile
В предыдущей главе мы представили, что такое контейнеризация, и некоторые основные концепции контейнеров Docker. Итак, давайте узнаем Dockerfile
о .
Когда дело доходит до Docker, Dockerfile неотделим, так что же такое Dockerfile? Dockerfile — это текстовый файл, используемый для создания образа Docker, который содержит ряд инструкций, описывающих, как создать этот образ.
2.2.1 Какие инструкции содержит Dockerfile
- Укажите базовый образ . В первой строке Dockerfile используйте
FROM
директиву чтобы указать, на каком существующем образе основан образ.
FROM openjdk:8-jdk-alpine
复制代码
- Скопируйте файлы приложения : используйте команду COPY или ADD, чтобы скопировать файлы приложения с хост-компьютера внутрь контейнера.
COPY target/*.jar /app.jar
复制代码
3. Команда «Выполнить» : используйте команду «Выполнить» для выполнения команд оболочки или других исполняемых файлов.
RUN apt-get update && \
apt-get install -y curl && \
rm -rf /var/lib/apt/lists/*
复制代码
- Предоставить порты : используйте
EXPOSE
инструкции, чтобы сообщить Docker, какие порты будет прослушивать контейнер.
EXPOSE 8080
复制代码
- Определите точку монтирования : используйте
VOLUME
команду, чтобы определить каталог для монтирования.
VOLUME /data
复制代码
- Установка переменных среды : используйте
ENV
директивы для установки переменных среды.
ENV app_name=myapp
复制代码
- Выполнение команд : используйте
ENTRYPOINT
директивы для определения команд, которые будут выполняться при запуске контейнера Docker.
ENTRYPOINT ["java","-jar","/app.jar"]
复制代码
2.2.2 Примечания к Dockerfile
При написании Dockerfile необходимо следовать следующим рекомендациям:
- Используйте лаконичный синтаксис и сократите количество ненужных комментариев.
- Устанавливайте только необходимые зависимости, а не всю библиотеку.
- Установите зависимые библиотеки в определенный каталог в контейнере, а не в глобальный каталог в контейнере.
- Копируйте только необходимые файлы, а не целые каталоги.
- Установите переменные среды для запуска команд в контейнере.
- Используйте двоичные файлы, а не исходный код, если не требуется компиляция.
Какие проблемы решают Dockerfiles?
1. Единые стандарты
- сборка приложения
-
- Ява, С++, JavaScript
- упаковка
- .Exe
- сборка докера.... зеркалирование
- обмен приложениями
-
- Все образы программного обеспечения размещаются в специально отведенном месте docker hub.
- андроид, рынок приложений
- приложение работает
-
- Единое зеркальное отображение
- докер запустить
2. Изоляция ресурсов
- Изоляция и ограничение ресурсов процессора, памяти
- Изоляция и ограничение доступа к устройствам
- Сетевая изоляция и ограничения
- Ограничения изоляции пользователей и групп пользователей
- ......
4. Архитектура
- Докер_хост:
-
- Хост, на котором установлен Docker
- Докер-демон:
-
- Фоновый процесс Docker, работающий на хосте Docker
- Клиент:
-
- Клиенты для работы с хостами Docker (командная строка, пользовательский интерфейс и т. д.)
- Реестр:
-
- зеркальный склад
- Докер Хаб
- Изображений:
-
- Зеркалирование, упакованные программы с окружением, можно запускать и запускать напрямую
- Контейнеры:
-
- Контейнер, работающая программа, запускаемая образом