Река берёт начало из родника в селе Александровка Глазуновского района Орловской области, проходит по Среднерусской возвышенности, в верховьях имеет глубоко врезанную, преимущественно узкую речную долину с значительными уклонами. Сначала течёт в северном направлении и в Орле сливается с Орликом, в Тульской области сливается с Упой, возле Калуги при слиянии с Угрой делает резкий поворот направо и после протекания через Алексин и Тарусу снова поворачивает на север, а затем возле Протвино опять поворачивает на восток. На участке от Серпухова до Ступино примерно вдоль Оки проходит граница Московской и Тульской областей. Возле города Коломна сливается с Москвой-рекой и далее, делая излучину, течёт на юг. В Рязанской области из-за холмистых местностей у Оки наблюдается заметная извилистость. Возле слияния с рекой Проня Ока, делая излучину, поворачивает направо, а после слияния с рекой Пара опять течёт на север, и, делая возле Касимова заметную большую излучину, продолжает течь на север. Далее с заметными излучинами течёт, разделяя Владимирскую и Нижегородскую области, где протекает также через Муром. В конце своего течения Ока доходит до Нижнего Новгорода, где впадает в Волгу.