Создание образов Docker
Dockerfile: Чертеж для создания образа
Dockerfile — это текстовый файл, содержащий инструкции для создания образа Docker. Каждая инструкция создаёт новый слой в образе, определяя среду, зависимости и конфигурацию приложения.
graph TD
A[Dockerfile] --> B[Базовый образ]
A --> C[Установка зависимостей]
A --> D[Копирование кода приложения]
A --> E[Настройка среды выполнения]
Типы инструкций Dockerfile
| Инструкция |
Назначение |
Пример |
| FROM |
Указать базовый образ |
FROM ubuntu:22.04 |
| RUN |
Выполнить команды |
RUN apt-get update |
| COPY |
Скопировать файлы в образ |
COPY app/ /application |
| WORKDIR |
Установить рабочую директорию |
WORKDIR /app |
| EXPOSE |
Определить сетевые порты |
EXPOSE 8080 |
| CMD |
Команда по умолчанию для контейнера |
CMD ["python", "app.py"] |
Практический пример создания образа Docker
## Создать структуру проекта
mkdir -p /tmp/docker-nodejs-app
cd /tmp/docker-nodejs-app
## Создать Dockerfile
cat > Dockerfile << EOL
FROM node:16-alpine
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
EOL
## Создать package.json
cat > package.json << EOL
{
"name": "nodejs-docker-app",
"version": "1.0.0",
"dependencies": {
"express": "^4.17.1"
}
}
EOL
## Создать простое приложение Express
cat > server.js << EOL
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Пример создания образа Docker');
});
app.listen(PORT, () => {
console.log($(Сервер запущен на порту ${PORT}));
});
EOL
## Собрать образ Docker
docker build -t nodejs-web-app .
## Проверить создание образа
docker images
Контекст сборки образа
Контекст сборки — это директория, содержащая Dockerfile и связанные файлы. Docker отправляет всю эту директорию в демона Docker во время создания образа, что позволяет создавать образ комплексно.
Многоэтапная сборка
Многоэтапная сборка позволяет создавать более компактные и эффективные образы, используя несколько инструкций FROM в одном Dockerfile, разделяя зависимости времени сборки и среды выполнения.