Можем ли мы заменить dockerfile на docker-compose.yml? - PullRequest
0 голосов
/ 31 октября 2018

Возможно, я не очень хорошо понял Docker, но не вижу смысла делать Dockerfile для моего использования . в compose я могу указать почти все, что мне нужно установить в моем dockerfile, кроме двух пунктов:

1) Я не нашел эквивалента для COPY / ADD в docker-compose.yml, поэтому я использую каталог, но он создает образ с хоста. В чем разница между копированием и добавлением? Возможно ли реализовать это из файла docker-compose?

2) Я не нашел эквивалент для RUN. Я использую скрипт узла, поэтому мне нужно установить NPM, как если бы вы использовали RUN в dockerfile. Я нашел способ установить «npm install && node server.js» в команде запуска моего файла package.json. Есть ли лучший способ сделать это? Может в командное поле?

Я не очень хорошо разбираюсь в английском, поэтому не стесняйтесь спрашивать о точности. Заранее спасибо за ваши ответы.

1 Ответ

0 голосов
/ 31 октября 2018

1) Вот официальные документы между COPY и ADD :

Хотя ADD и COPY функционально схожи, вообще говоря, COPY является предпочтительным. Это потому, что он более прозрачен, чем ADD. COPY поддерживает только базовое копирование локальных файлов в контейнер, в то время как ADD имеет некоторые функции (такие как локальное извлечение tar и удаленный Поддержка URL), которые не сразу очевидны. Следовательно, лучший для ADD используется локальное извлечение файла tar в образ, как в ДОБАВИТЬ rootfs.tar.xz /.

Вы не можете сделать это в docker-compose.yml, вам придется использовать Dockerfile, если вы хотите добавить файлы к изображению.

2) docker-compose.yml имеет как точку входа, так и переопределение команды. Аналогично тому, как вы передаете CMD во время выполнения с помощью докера, вы можете сделать с docker-compose run

docker run -itd mystuff/myimage:latest bash -c 'npm install && node server.js'

Вы можете сделать это с помощью docker-compose, предполагая, что имя службы здесь myservice:

docker-compose run myservice bash -c 'npm install && node server.js'


Если в вашем сценарии использования используется только один контейнер, вероятно, трудно увидеть преимущества docker-compose для новичка. Если бы вы добавили mongodb контейнер nginx в свой стек разработки, вы бы начали видеть, где docker-compose действительно подхватывает и дает вам преимущества. Он работает лучше всего, когда используется для организации нескольких контейнеров, которые должны работать и взаимодействовать друг с другом.

...