Docker совет №5: Разница между инструкциями RUN и CMD

Nov 2, 2017 08:38 · 152 words · 1 minute read docker

Инструкции 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"]
tweet Share