Activate the yeast. Pour the lukewarm milk into a large bowl. Add the yeast and granulated sugar and stir to combine. Let stand for 5–10 minutes, until foamy.
Mix and knead. In a small bowl, whisk together the eggs, salt, and oil. Stir into the yeast mixture. Gradually add the flour, mixing until a dough forms. Knead until smooth and elastic. The dough should remain soft and slightly tacky.
First rise. Place the dough in a lightly oiled bowl and cover. Let rise in a warm place for about 1 hour, or until doubled in size.
Roll and cut. Transfer the dough to a lightly floured surface. Roll to approximately ⅜ inch (1 cm) thick. Cut into rounds with a lightly floured round cutter, leaving the centers intact. Gently gather and reroll the scraps to cut additional rounds.
Second rise. Arrange the rounds on lightly floured trays, leaving space between them. Cover loosely and let rise for about 20 minutes, until noticeably puffy.
Fry. Heat the frying oil in a deep, heavy pan to 350°F (175°C). Carefully add a few doughnuts at a time without crowding. Fry until golden underneath, then turn and fry the second side until golden and cooked through. Adjust the heat to maintain the oil temperature between batches. Check the center of the first doughnut to help judge cooking time.
Drain and cool. Transfer the doughnuts to paper towels to absorb excess oil. Allow them to cool completely before filling.
Fill and finish. Make a small opening in the side of each doughnut and gently create space inside without piercing the opposite side. Pipe in vanilla cream, apricot jam, or chocolate spread. Leave some unfilled if desired. Dust with powdered sugar before serving.