Docker: шпаргалка для тех, кто не хочет тонуть в контейнерах
"У меня на машине работает!" - самый страшный баг в истории. Docker решает это, упаковывая приложение со всем его окружением в контейнер. Вот шпаргалка, чтобы не запутаться в базовых командах.
Пример:
➤ Собрать образ:
➤ Запустить контейнер:
➤ Посмотреть запущенные контейнеры:
➤ Посмотреть все контейнеры:
➤ Остановить контейнер:
➤ Посмотреть логи:
➤ Зайти внутрь контейнера
Dockerfile - это инструкция по сборке образа. Образ - это шаблон. Контейнер - это запущенный экземпляр образа.
🌐 @helcode | #docker
"У меня на машине работает!" - самый страшный баг в истории. Docker решает это, упаковывая приложение со всем его окружением в контейнер. Вот шпаргалка, чтобы не запутаться в базовых командах.
Пример:
➤ Собрать образ:
docker build -t myapp:latest .➤ Запустить контейнер:
docker run -d -p 8080:80 myapp:latest➤ Посмотреть запущенные контейнеры:
docker ps➤ Посмотреть все контейнеры:
docker ps -a➤ Остановить контейнер:
docker stop <container_id>➤ Посмотреть логи:
docker logs <container_id>➤ Зайти внутрь контейнера
docker exec -it <container_id> bashDockerfile - это инструкция по сборке образа. Образ - это шаблон. Контейнер - это запущенный экземпляр образа.
Docker - это как виртуальная машина, только без лишнего веса. Если виртуальная машина - это целый дом, то Docker-контейнер - это студия с мебелью Икеа: всё необходимое, ничего лишнего.
🌐 @helcode | #docker
👍7
Пишем свой Dockerfile для Python-приложения
Ваше Python-приложение зависит от конкретных версий пакетов, системных библиотек и переменных окружения. Давайте упакуем его в Docker, чтобы оно запускалось везде одинаково.
Пример:
Как собрать и запустить:
Сначала копируем requirements.txt и устанавливаем зависимости - это позволяет Docker кэшировать этот слой и не переустанавливать зависимости при каждом изменении кода.
А Вы уже перевели свои проекты в Docker?
🌐 @helcode | #docker
Ваше Python-приложение зависит от конкретных версий пакетов, системных библиотек и переменных окружения. Давайте упакуем его в Docker, чтобы оно запускалось везде одинаково.
Пример:
# Используем официальный Python образ
FROM python:3.11-slim
# Устанавливаем рабочую директорию
WORKDIR /app
# Копируем зависимости сначала (для кэширования)
COPY requirements.txt .
RUN pip install -r requirements.txt
# Копируем весь проект
COPY . .
# Открываем порт
EXPOSE 8000
# Запускаем приложение
CMD ["python", "main.py"]
Как собрать и запустить:
docker build -t mypythonapp .
docker run -p 8000:8000 mypythonapp
Сначала копируем requirements.txt и устанавливаем зависимости - это позволяет Docker кэшировать этот слой и не переустанавливать зависимости при каждом изменении кода.
А Вы уже перевели свои проекты в Docker?
Писать Dockerfile - это как собирать чемодан в отпуск: положил всё необходимое, но не забыл про зубную щетку (системные зависимости).
🌐 @helcode | #docker
💯3👏1
Docker: оптимизация образов
Docker образы слишком большие и медленно собираются?
Многоступенчатая сборка и оптимизация слоев
🛠 Советы по оптимизации:
➤ Используйте .dockerignore
➤ Объединяйте RUN команды
➤ Копируйте requirements.txt отдельно для кеширования
➤ Используйте легковесные базовые образы (alpine, slim)
🌐 @helcode | #docker
Docker образы слишком большие и медленно собираются?
Многоступенчатая сборка и оптимизация слоев
# Многоступенчатая сборка для Python
FROM python:3.9-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user -r requirements.txt
FROM python:3.9-slim
WORKDIR /app
COPY --from=builder /root/.local /root/.local
COPY . .
ENV PATH=/root/.local/bin:$PATH
CMD ["python", "app.py"]
🛠 Советы по оптимизации:
➤ Используйте .dockerignore
➤ Объединяйте RUN команды
➤ Копируйте requirements.txt отдельно для кеширования
➤ Используйте легковесные базовые образы (alpine, slim)
🌐 @helcode | #docker
👍3