Перевод на русский язык (ru)
Docker - Инструкции
Здравствуйте, будущие маги Docker! Я рад стать вашим проводником в этом захватывающем путешествии по миру команд Docker. Как alguien, кто teaches computer science на протяжении многих лет, я могу сказать, что Docker resembles a magic wand для разработчиков. Он делает нашу жизнь значительно easier! Итак, натянем рукава и окунемся в fascinierende мир инструкций Docker.
Инструкция CMD
Инструкция CMD resembles主角 в фильме - это звезда шоу, когда дело доходит до контейнеров Docker. Она tells Docker, какую команду выполнять при запуске вашего контейнера.
Базовая Синтаксис
CMD ["исполняемый_файл", "параметр1", "параметр2"]
Давайте разберем это на простом примере:
FROM ubuntu
CMD ["echo", "Привет, мир Docker!"]
В этом случае, когда вы запустите свой контейнер, он выведет "Привет, мир Docker!" в консоль. Это как если бы ваш контейнер махал рукой, как только просыпается!
Множественные инструкции CMD
Вот一个小кий trick question: Что happens, если у вас есть несколько инструкций CMD в вашем Dockerfile?
FROM ubuntu
CMD ["echo", "Первая команда"]
CMD ["echo", "Вторая команда"]
Если вы предположили, что обе команды будут выполняться, к сожалению, вы попали в распространенную ловушку! Фактически, только последняя инструкция CMD будет выполнена. Это как в пьесе - только последний акт имеет значение!
Форма Shell vs. Exec Form
CMD можно записать в двух формах:
- Форма Shell:
CMD команда параметр1 параметр2
- Exec form:
CMD ["исполняемый_файл", "параметр1", "параметр2"]
Форма Exec prefered, так как она более explicit и избегает проблем с парсингом shell.
ENTRYPOINT
Если CMD resembles主角, то ENTRYPOINT resemblesрежиссер нашего Docker фильма. Он устанавливает основную команду для контейнера, которая не может быть перезаписана при запуске контейнера.
Базовая Синтаксис
ENTRYPOINT ["исполняемый_файл", "параметр1", "параметр2"]
Давайте посмотрим на пример:
FROM ubuntu
ENTRYPOINT ["echo", "Привет из"]
CMD ["Docker"]
Когда вы запустите этот контейнер, он выведет "Привет из Docker". Но вот где это становится интересным! Если вы запустите контейнер с дополнительными аргументами, они заменят CMD, но не ENTRYPOINT.
docker run myimage Мир
Это выведет "Привет из Мир". Это как если бы ENTRYPOINT устанавливал сцену, а CMD (или аргументы runtime) были актерами, выступающими на ней!
ENV
ENV resembles гардеробный отдел нашего Docker производства. Он устанавливает переменные окружения, которые могут быть использованы в течение всего контейнера.
Базовая Синтаксис
ENV ключ=значение
Давайте рассмотрим практический пример:
FROM ubuntu
ENV MY_NAME="Энтузиаст Docker"
CMD ["sh", "-c", "echo Привет, $MY_NAME!"]
Это выведет "Привет, Энтузиаст Docker!" при запуске контейнера. Это как если бы ваш контейнер получил бейдж с именем!
Множественные инструкции ENV
В отличие от CMD, вы можете иметь несколько инструкций ENV, и все они будут生效ительны:
FROM ubuntu
ENV MY_NAME="Энтузиаст Docker"
ENV MY_DOG=Rex MY_CAT=Fluffy
CMD ["sh", "-c", "echo Привет, $MY_NAME! твои питомцы это $MY_DOG и $MY_CAT."]
Этот контейнер поздоровается с вами и представит ваших питомцев!
WORKDIR
WORKDIR resembles художника по декорациям для нашего Docker производства. Он устанавливает рабочую директорию для любых команд, следующие за ней в Dockerfile.
Базовая Синтаксис
WORKDIR /путь/к/директории
Давайте посмотрим на это в действии:
FROM ubuntu
WORKDIR /app
COPY . .
CMD ["ls", "-l"]
Этот Dockerfile устанавливает рабочую директорию в /app
, копирует содержимое текущей директории в нее, и затем перечисляет содержимое при запуске контейнера. Это как если бы вы сказали своему контейнеру: "Эй, устройся поудобнее в этой директории!"
Множественные инструкции WORKDIR
Вы можете использовать WORKDIR несколько раз, чтобы изменить директории:
FROM ubuntu
WORKDIR /app
WORKDIR src
WORKDIR scripts
RUN pwd
Это выведет /app/src/scripts
. Это как если бы вывели вашего контейнера по новому дому!
Все вместе
Теперь, когда мы рассмотрели все наши команды Docker, давайте посмотрим, как они работают вместе в реальном сценарии. Представим, что мы создаем простое веб-приложение на Python:
FROM python:3.9-slim
# Установить переменные окружения
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Установить рабочую директорию
WORKDIR /app
# Установить зависимости
COPY requirements.txt .
RUN pip install -r requirements.txt
# Скопировать проект
COPY . .
# Команда для запуска приложения
ENTRYPOINT ["python"]
CMD ["app.py"]
Этот Dockerfile настраивает окружение Python, устанавливает зависимости, копирует код приложения и specifies, как запустить приложение. Это как рецепт для создания идеальной среды для нашего приложения на Python!
Резюме команд
Вотquick reference table команд, которые мы рассмотрели:
Команда | Описание | Пример |
---|---|---|
CMD | Указывает команду для выполнения при запуске контейнера | CMD ["python", "app.py"] |
ENTRYPOINT | Устанавливает основную команду для контейнера | ENTRYPOINT ["python"] |
ENV | Устанавливает переменные окружения | ENV MY_VAR=значение |
WORKDIR | Устанавливает рабочую директорию | WORKDIR /app |
Запомните, эти команды resembleстроительные блоки вашего Docker контейнера. Смешивайте и сочетайте их, чтобы создать идеальную среду для вашего приложения!
И вот оно, мои дорогие студенты! Мы совершили путешествие по стране инструкций Docker, от звездного CMD до режиссерского ENTRYPOINT, от костюмерного ENV до художника по декорациям WORKDIR. Надеюсь, это руководство осветило ваш путь в ваших приключениях с Docker. Помните, практика делает мастера, так что не бойтесь экспериментировать с этими командами. Счастливого Dockering!
Credits: Image by storyset