Автор: Соня Гамильтон (Sonia Hamilton)
Примечания переводчика:
Искал однажды что-то в интернете и вышел на блог этой авторши. Сейчас уже не помню почему, добавил этот материал в список того, что было бы неплохо перевести. Сейчас смотрю и недоумеваю - зачем мне это понадобилось? Ничего лучше фразы "чтоб было" в голову не пришло. Ну пусть будет.Несколько заметок о Dockerfile'ах Docker.
Команды
- MAINTAINER - автор, адрес электронной почты и т.п.
- FROM - базовый образ, например Ubuntu.
- CMD и ENTRYPOINT. Любая из них по отдельности может быть использована для указания исполняемого файла по умолчанию. Если используются обе, то CMD добавляется к ENTRYPOINT для получения командной строки контейнера. Любая из них может быть заменена при запуске docker. Однако CMD легче - она просто берёт остаток команды запуска docker (как "$*" в сценариях оболочки) - разрешая образу docker почувствовать себя в роли выполняемого файла, запущенного через "обёртку".
- RUN - установочные команды. В режиме разработки разделите команды RUN, так что слои кэшировались и собирались быстрее. В рабочем режиме лучше воспользоваться цепочкой команд RUN, разделённых знаками && или точкой с запятой, поскольку несколько отдельных команд RUN создают несколько слоёв.
- COPY и ADD. COPY копирует файлы в образ. ADD делает то же самое, но также может разархивировать файл или скачать его по ссылке. Избегайте использования команды ADD, поскольку она обладает излишне сложным поведением.
- VOLUME - постоянный каталог на родительской файловой системе внутри /var/lib/docker/volumes. Для получения ожидаемого поведения (общий каталог для родительской системы и контейнера) воспользуйтесь командой docker run -v /var/tmp/foo:/var/tmp/foo.
- ENV, WORKDIR и USER - переменные окружения, текущий каталог и идентификатор пользователя для команд CMD/ENTRYPOINT.
- EXPOSE - открыть сетевой порт. Воспользуйтесь форматом nn, а не nn:mm, который позволяет пользователю указать публичный порт при помощи опции -p. Порт, открытый при помощи команды EXPOSE может быть автоматически отображён при помощи опции -P.
Сборка, запуск, выполнение
# Собрать образ и пометить его, использовать текущий каталог в качестве контекста docker build -t="soniah/foo:1.0" . # Запустить, автоматически отобразить порты. В режиме разработки опустите -D - стандартный поток # вывода будет выводиться на экран, а контейнер автоматически остановится при нажатии Ctrl-C. docker run -P sonia/foo # Получить интерактивную оболочку docker exec -it random_name bash # Удалить все старые образы, за исключением базовых образов Ubuntu docker rmi -f `docker images | tail -n +2 | grep -v 'ubuntu' | awk {'print $3'}` # Удалить все контейнеры, включая остановленные контейнеры docker rm -f `docker ps --no-trunc -aq`
Комментариев нет:
Отправить комментарий