я хотел бы предложить третий подход, который я сделал для статического созданного сайта, отдельной сборка изображения.
В этом подходе ваш основной Dockerfile
(тот, что в корне проекта) становится образцом построения и разработки, в основном делая все во втором подходе.Тем не менее, вы переопределяете CMD
во время выполнения, которое должно деформировать встроенную папку dist
в dist.tar
или аналогично.
Затем у вас есть другая папка (что-то вроде image
), которая имеет Dockerfile
. Роль этого изображения заключается только в том, чтобы обслуживать содержимое dist.tar
. Итак, мы делаем docker cp <container_id_from_tar_run> /dist
. Затем Dockerfile
просто устанавливает наш веб-сервер и имеет ADD dist.tar /var/www
.
Абстрактный что-то вроде:
- Построить
builder
Docker образ (который получает Вас рабочую среду без веб-сервера). В данный момент приложение построено. Мы могли бы запустить контейнер в разработке с помощью grunt serve
или любой другой команды, чтобы запустить наш встроенный сервер разработки.
- Вместо запуска сервера мы переопределяем команду по умолчанию, чтобы разгрузить нашу папку dist. Что-то вроде
tar -cf /dist.tar /myapp/dist
.
- Теперь у нас есть временный контейнер с артефактом
/dist.tar
. Скопируйте его в папку фактического развертывания Docker, которую мы назвали image
, используя docker cp <container_id_from_tar_run> /dist.tar ./image/
.
- Теперь мы можем создать небольшое изображение Docker без всех наших зависимостей разработки с
docker build ./image
.
Мне нравится этот подход, потому что он все еще докеры. Все команды в этом подходе являются командами Docker, и вы можете реально уменьшить изображение, которое вы в конечном итоге развертываете.
Если вы хотите проверить изображение с помощью этого подхода в действии, ознакомьтесь с https://github.com/gliderlabs/docker-alpine, который использует изображение строителя (в папке-компоновщике) для создания файлов tar.gz, которые затем копируются в соответствующую папку Dockerfile
.
Не могли бы вы указать на несколько примеров? –
Что значит Адриан? Примеры файла Docker? – scarmuega
Да. дополнительные символы, поэтому я могу сказать «да». –