First you need a firmware file. You can build one yourself with the Toolchain or download one:
To flash the ESP8266, you'll need first need to wire things up. See Getting Started with ESP8266 for the basics.
Connect GPIO 0 to ground and reboot the ESP8266 to enter flashing mode.
The NodeMCU flasher is designed for use with the NodeMCU firmware, but it can also be used to flash other firmware files. Windows-only currently, but a cross-platform version is in the works.
See ESPtool on Github and Christopher Rust's accompanying YouTube tutorial. However, if you don't want to use a Python-based tool, there are two other command-line tools on Github: Christian Klippel's esptool-ck written in C for Windows, Linux and OS X, and Don Kinzer's esp_tool written in C++ with makefiles for Windows and Linux (also includes a pre-built Windows executable).
All three command-line utilities perform the same basic functions but the invocation syntax is different for each. Kinzer's esp_tool utility can also build a sparse combined image file meaning that most of the “filler” between the actual image data components is omitted. Omitting the filler can significantly reduce the Flashing time while still providing the benefits of a combined image file.