There is no "best way" to find similar images. It highly depends on your data. E.g. is your images are faces of people, you would use another approach as with buildings or paintings.
To get started:
If you want to find similar faces, you could go with the Eigen-Faces approach: http://en.wikipedia.org/wiki/Eigenface. In this case you would train with a set of images and you can measure the distance (which is the similarity) of those training images to your data. You can find similar faces or just identify pictures which contain something like a face.
If you are interested in similar colors for example, you could go with a color histograms: http://en.wikipedia.org/wiki/Color_histogram. In this case you would need a measurement to measure the distance between histograms. You would create the histogram (of the gray-scale or of different colors) and you would measure the distance between those histograms.
If you know what your data looks like, you should inform yourself about algorithms. The two mentioned above are just two of many algorithms out there. Then you should search for tools and libraries which implement those algorithms. Just asking for "the best one" will not lead to a usable answer, it is far to wide.
You will also ran in problems like the picture size, alignment of objects and performance. Finding similar pictures is difficult.