I used to rely on image gallery plugins, like PhotoQ -which no longer exists- or NextGen.
For one, a plugin may die and leave a migration problem, or it may be well maintained but require too much of custom coding.
Nowadays I try to keep it within WordPress attachment post type. A plugin may handle it but changing plugins is feasible.
Advanced Custom Fields is being actively maintained and can handle the task with ease. But the Repeater field is a premium add-on. And if you go premium, then it's better to use the Gallery add-on.
Another plugin option is Custom Content Type Manager, which also handles Custom Post Types and the repeater field is built-in.
You can find a complete example on how to make a post gallery with CCTM here: Creating Photo Gallery System with Custom Post Type.
If you want to make your own plugin, then see:
- This gist is an example on how to program a repeatable uploader field. Based in this SO topic. But as the original, it lacks drag and drop ordering.
- And this other gist to see how to implement the drag and drop feature.