It's definitely possible, and one of the main reasons for using DIP packages on the Arduino board.
Check out the hacking section of the site: http://www.arduino.cc/en/Hacking/HomePage. In particular, there's a diagram of the mapping of the Arduino pins to the ATmega168 pins: http://www.arduino.cc/en/Hacking/Atmega168Hardware.
If you want your code to run unchanged, the main thing you need is a 16 MHz oscillator and the two capacitors that work with it. See the Diecimila schematic for details: http://www.arduino.cc/en/uploads/Main/Arduino-Diecimila-schematic.pdf. You also need a way to power the chip, of course, and probably a way to reset it (besides just pulling the power). If you're going to want to program it on a breadboard, you'll probably want to hook up the auto-reset, which involves putting a 100 nano-farad capacitor between DTR (of whatever USB-to-serial convertor you're using), and the reset line of the ATmega168. Or you can just put the chip back in the Diecimila to reprogram it.