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