Работа с Docker за пределами терминала
До этого момента мы использовали Docker исключительно через терминал. Теперь создадим полноценный проект, поместим его в образ и добавим необходимый функционал, включая язык программирования. В этом курсе используется Visual Studio Code, но вы можете использовать и другие IDE. Рекомендуется установить расширения «Docker» и «Remote — Containers» для VS Code, чтобы упростить работу с Docker и контейнерами.
Создание проекта и Dockerfile
Создайте новый проект. Например, откройте папку «Загрузки», создайте папку «project» и откройте её. В этой папке создайте файл Dockerfile (с заглавной буквы «D» и без расширения).
Dockerfile: пример на основе OpenJDK
В Dockerfile записывается код. Рассмотрим пример на основе образа openjdk. Код для других образов будет похож, отличаться будут имена образов и версии.
FROM openjdk
COPY . /app
WORKDIR /app
RUN javac Main.java
CMD ["java", "Main"]
EXPOSE 8001
Описание команд:
- FROM openjdk: указывает базовый образ (OpenJDK). Можно указать версию (например, openjdk:11), иначе будет использована последняя.
- COPY . /app: копирует все файлы из текущей директории в папку /app внутри образа. Для файлов из отдельной папки укажите её путь.
- WORKDIR /app: устанавливает рабочую директорию внутри образа.
- RUN javac Main.java: компилирует файл Main.java при создании образа.
- CMD ["java", "Main"]: команда, выполняемая при запуске контейнера. Синтаксис: массив строк.
- EXPOSE 8001: указывает порт 8001, доступный извне контейнера.
Файл Main.java
Создайте файл Main.java:
class Main {
public static void main(String[] args) {
System.out.println("Hello, world!");
}
}
Сборка образа
В терминале выполните команду:
docker build .
Точка (.) указывает на текущую директорию, где находится Dockerfile.
Проверка и удаление образа
Проверьте созданный образ:
docker images
Для удаления образа используйте:
docker rmi <IMAGE_ID>
где <IMAGE_ID> — идентификатор образа.
Запуск контейнера
Запустите контейнер:
docker run -p 3001:8001 <IMAGE_ID>
-p 3001:8001 перенаправляет порт 3001 на локальной машине на порт 8001 внутри контейнера. <IMAGE_ID> — идентификатор образа. В случае ошибки (например, из-за неверного кода в Main.java), исправьте код, удалите образ и пересоберите его.
Работа с другими языками программирования
Аналогичный подход применим к другим языкам (Python, Node.js и др.). Docker позволяет запускать различные приложения и технологии, включая WordPress, Laravel.
Передача проекта
Для передачи проекта достаточно передать Dockerfile и другие необходимые файлы. Получатель запустит проект командой docker run. Выгрузка на Docker Hub будет рассмотрена в следующих уроках.
Ограничения использования EXPOSE с OpenJDK
Использование EXPOSE и -p с базовым образом OpenJDK может не работать, так как в нём нет встроенного веб-сервера. Для веб-приложений добавьте веб-сервер (например, Nginx или Apache) с использованием Docker Compose (будет рассмотрено в следующих уроках).
Docker упрощает разработку, тестирование и развертывание приложений. Создавая собственные образы, вы получаете возможность упаковывать приложения вместе со всеми зависимостями, что обеспечивает переносимость и воспроизводимость среды.