Как обновить изображение Docker? [Дубликат]

Одна вещь, которую вы можете попробовать, это смотреть. (Thomas M. DuBuisson предложил другой, который также будет работать, если вы правильно обработаете окончательный один или два элемента.) Поскольку кажется, что это проблема, которую вы хотите решить самостоятельно, как упражнение для обучения, я напишу скелет, который вы можете взять в качестве отправной точки, если хотите:

largest :: [Integer] -> [Integer]
largest [] = _
largest [x] = _ -- What should this return?
largest [x1,x2] | x1 > x2   = _
                | x1 < x2   = _
                | otherwise = _
largest [x1,x2,x3] | x2 > x1 && x2 > x3 = _
                   | x3 > x2 = _
                   | otherwise = _
largest (x1:x2:x3:xs) | x2 > x1 && x2 > x3 = _
                      | otherwise          = _

В дополнение к (x1:x2:x3:[]) нам нужен специальный случай [x1,x2,x3], поскольку, согласно пояснению вашего комментария, largest [3,3,2] должен вернуться []. но largest [3,2] должен вернуться [3]. Поэтому последние три элемента требуют специальной обработки и не могут просто перезаписываться на последних двух.

Если вы также хотите, чтобы результат включал заголовок списка, если он больше второго элемента, вы должны сделайте это вспомогательной функцией, а ваш largest будет похож на largest (x1:x2:xs) = (if x1>x2 then [x1] else []) ++ largest' (x1:x2:xs). То есть вам нужна специальная обработка для первых элементов исходного списка, которые вы не хотите применять ко всем подспискам, когда вы рекурсируете.

47
задан Golo Roden 17 June 2014 в 21:14
поделиться

1 ответ

означает, что я должен повторно создавать контейнер приложения каждый раз, когда я что-то меняю, даже если это не опечатка

не обязательно, вы можете использовать -v для команды docker run , чтобы ввел файлы вашего проекта в контейнер. Таким образом, вам не придется восстанавливать изображение докеров.

Обратите внимание, что команда ONBUILD предназначена для случаев, когда Dockerfile наследует FROM родительский файл докеров. Команды ONBUILD, найденные в родительском файле Dockerfile, будут выполняться, когда Docker создает образ дочернего файла Docker.


Это не кажется очень эффективным, например. при создании веб-приложений, где вы привыкли что-то менять, сохранять и удалять обновления в браузере.

Если вы используете контейнер Docker для обслуживания веб-приложения во время итерации по этому код приложения, то я предлагаю вам создать специальное изображение Docker, которое содержит только все, чтобы запустить ваше приложение, но код приложения.

Затем поделитесь каталогом, который содержит код вашего приложения на вашей машине, с каталогом, из которого файлы приложения будут обслуживаться в контейнере докера.

Например, если я разрабатываю статический веб-сайт и мое рабочее пространство находятся в /home/thomas/workspace/project1/, тогда я бы начал контейнер с nginx с:

docker run -d -p 80:80 -v /home/thomas/workspace/project1/:/usr/local/nginx/html:ro nginx

Таким образом, я могу изменять файлы в /home/thomas/workspace/project1/, и изменения отражаются в прямом эфире без чтобы восстановить изображение докера или даже перезапустить контейнер докера.

73
ответ дан Thomasleveil 26 August 2018 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: