Skip to content

DevOps-spb-org/docker-examples

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Docker examples

Примеры для урока по Docker

Зачем уметь работать с Docker?

  • Упаковка любого приложения в контейнер
  • Возможность быстрого тестирования
  • Возможность локальной разработки
  • Повышение скорости применения изменений

Оглавление

  • Что такое Dockerfile
  • Основные инстуркции Dockerfile
  • Общие рекомендации по Dockerfile
  • Создадим первый Docker-образ

Что такое Dockerfile

  • Текстовый файл с последовательными инструкциями для сборки образа
  • Каждая инстуркция создает промежуточный слой образа
  • Инструкции кэшируются в образах
  • Саму сборку выполняет демон Docker, а не Docker CLI

Основные инстуркции Dockerfile

  • Инструкция FROM указывает базовый образ, на основе которого мы строим свою сборку

    FROM ubuntu:latest
    FROM alpine:3.4

  • Инструкция LABEL задает метаданные для нашего образа

    LABEL maintainer="stravnik" version="0.0.1"

  • Инструкция COPY копирует файлы из текущей директории в образ

    COPY src dst
    COPY httpd.conf /etc/httpd/conf/

  • Инструкция ADD копирует любые файлы в образ. Не рекомендуется к использованию.
  • Инструкция ENV задает переменные окружения при сборке

    ENV LOG_LEVEL debug

  • Инструкция WORKDIR задает рабочую директория при сборке

    WORKDIR path

  • Инструкция VOLUME позволяет указать точки для монтирования томов внутри образа

    VOLUME dst
    VOLUME /app /db /data
    VOLUME ["/var/www", "/var/html"]

  • Инструкция EXPOSE позволяет указать порты, которые слушает сервис в запущенном контейнере

    EXPOSE 5000
    EXPOSE 8080/tcp

  • Инструкция RUN задает команды, которые выполняются при сборке контейнера

    RUN apt-get update && apt-get install nano
    RUN ["bash", "-c", "rm", "-rf", "/tmp"]
    RUN ["script.sh", "arg1", "argN"]

  • Инструкция CMD задает команду, которая выполняется при старте контейнера (можно переназначить при старте контейнера)

    CMD /script.sh
    CMD ["echo", "CMD echo"]

  • Инструкция ENTRYPOINT задает команду, которая выполняется при старте контейнера (нельзя переназначить при старте контейнера)

    ENTRYPOINT /script.sh
    ENTRYPOINT ["echo", "CMD echo"]

Общие рекомендации по Dockerfile

  • Избегайте установки лишних пакетов
  • Избегайте упаковки в образ лишних/ненужных данных
  • Используйте связанные команды для RUN-инструкций
  • Следите за последовательностью описания Dockerfile, избегайте cache miss
  • Уменьшайте количество слоев
  • Один контейнер - одна задача
  • Чистите за собой

Создадим первый Docker-образ

FROM nginx:mainline-alpine3.18

COPY /src /usr/share/nginx/html

EXPOSE 80