Docker совет №5: Разница между инструкциями RUN и CMD
Nov 2, 2017 08:38 · 152 words · 1 minute read
Инструкции RUN
и CMD
являются очень важными частями Dockerfile, и они выполняют разные задачи. Давайте разберемся, что они делают!
Эти инструкции выполняются при сборке docker-образа из Dockerfile. RUN
позволяет выполнять команды внутри вашего docker-образа — такие команды выполняются только один раз во время сборки и создают новый слой в итоговом docker-образе.
Если вам необходимо установить пакет или создать каталог внутри вашего docker-образа, то инструкция RUN
подойдет вам как нельзя лучше. Например:
RUN mkdir -p /var/www/test
или
RUN apt-get update && apt-get -y install libmcrypt-dev curl libmemcached-dev libz-dev \
libpq-dev libjpeg-dev libpng12-dev libfreetype6-dev libssl-dev libmagickwand-dev \
zlib1g-dev libicu-dev g++ --no-install-recommends
Инструкция CMD
позволяет определить команду по умолчанию, которая будет выполняться при запуске вашего docker-контейнера (запущенный docker-образ называется контейнером). Эта инструкция не выполняется во время сборки!
Например, в Dockerfile для веб-приложения вполне логично добавить инструкцию CMD
, которая запустит веб-сервер при старте контейнера, например:
CMD ["php", "-S", "0.0.0.0:9095", "-t", "public", "public/index.php"]
или:
CMD ["/nodejs/bin/node", "/app/server.js"]