Born in Swindon, England, Mills started his football career at Aston Villa's academy before opting to move to Southampton in August 2006. At Southampton, alongside his brother Matthew, he progressed through the academy and reserve sides before being promoted to the first team ahead of the 2008–09 season.
He made his Southampton first team debut as substitute in a League Cup match against Birmingham City on 26 August 2008. He made his league debut at home against Barnsley on 20 September 2008.
After making a handful of appearances for Southampton, on 23 February 2009, he joined Scunthorpe United on an emergency loan for one month. Mills made his Scunthorpe United debut on 24 February 2009, where he made his first start, in a 2–0 loss against Southend United. On 24 March, the loan was extended to the end of the 2008–09 season. Although Mills played regularly as Scunthorpe finished in 6th Place, he tore a hamstring in the final match of the league season and missed the play-offs in which Scunthorpe secured promotion to the Championship.
After returning from a loan spell at Scunthorpe United, Mills signed a new three-year contract in August 2009 after some good pre-season performances, featuring sporadically during the 2009–10 season. However, Mills did play in Southampton's victorious Football League Trophy final against Carlisle United.
In the 2010–11 season, Mills lost his first team place under the management of Nigel Adkins and joined Doncaster Rovers on a one-month emergency loan deal on 19 October 2010, making his debut the same day in a 3–2 defeat by Derby County. This loan deal was then extended to 19 January 2011. Mills scored his first professional goal for Doncaster in a 3–0 victory over former loan club Scunthorpe United on 1 January 2011. Weeks later, on 15 January 2011, Mills was injured in Doncaster's 3–0 defeat to Reading and this may have been his last action for Doncaster. On 31 January 2011, the loan deal was extended until the end of the season. Mills then scored his second goal for the club on 1 March 2011, in a 3–1 win over Derby County. Mills later finished the season, making eighteen appearance and scoring two times.
In July 2011, he joined Preston North End on trial. Around the same time, Mills was a subject of a move to Doncaster Rovers on a permanent basis. His future at Southampton become increasingly in doubt after being left out of the squad for the pre-season tour in Switerzland.
On 22 August 2011, he joined Reading for an undisclosed fee, signing a one-year contract with the option of another year. Upon joining the club, Mills revealed his brother, Matthew, played a role that led him to join Reading, a club he left for Leicester City before Joseph arrived.
He made his first start for the Royals in a 2–1 defeat by Charlton Athletic, in the League Cup first round on 23 August 2011, coming off the bench for Ian Harte in the 62nd minute. Four days later, Mills made his league debut for Reading, in a 1–0 loss against Hull City. On 6 November 2011, Mills was announced as Man of the Match after Reading defeated Birmingham City 1–0 thanks to a Noel Hunt winner.
Mills signed a contract extension on 8 February 2012 keeping him at Reading until the end of the 2014 season. However, Mills suffered injuries that kept him out for the most of the season. In his first season at Reading, Mills made fifteen appearance for the club.
On 17 July 2012, Mills joined Burnley on a season long loan after falling down the pecking order at Reading.
He made his Burnley debut in the League Cup first round win over Port Vale and then made his first league appearance the following weekend in the 2–0 win against Bolton Wanderers. He went on to make 10 league appearances during the 2012–13 season, before joining Burnley permanently in the summer of 2013, signing a two-year contract.
On 16 August 2013, he joined League One side Oldham Athletic on a one-month loan deal. Mills made his Oldham Athletic debut the next day, in a 2–1 loss against Peterborough United. Mills soon extended his loan spell for the second and third time. Despite suffering from an injury, Mills went on to make eleven appearance for the club and returned to his parent club on 22 November 2013.
On 31 January 2014, Mills joined Shrewsbury Town on loan for the remainder of the 2013–14 season. Mills made his Shrewsbury Town debut the next day, coming on as a substitute for Paul Parry in the 82nd minutes, in a 1–1 draw against Brentford. On 29 March 2014, Mills received a straight red card after a foul on James Chambers, in a 1–0 loss against Walsall. After an unsuccessful appeal over his suspension, Mills returned to the first team and made the total of thirteen appearance for the club.
On 4 June 2014, Mills signed for Oldham Athletic where he had spent a loan spell the previous season. He signed a two-year contract with the option of a third and was the Latics first summer signing. Upon joining the club, Manager Lee Johnson said of the signing "It's a great signing. He's young, hungry and got a lot of potential. We'll give him an identity and a bit of love and I feel he can be a really good player for us." Upon signing for the club, Mills was given number three shirt ahead of a new season.
Mills' first game after signing for the club on a permanent basis came in the opening game of the season on 9 August 2014, where he played 90 minutes, in a 2–2 draw against Colchester United. On 16 September 2014, Mills then provided assist for James Dayton to score the first goal of the game, in a 2–2 draw against Swindon Town. Mills' performance was praised by Oldham Athletic supporters and was rewarded with October's Player of the Month and December's Player of the Month by supporters. However, Mills was soon sent-off in the 75th minutes after making a tackle, in a 2–2 draw against Doncaster Rovers on 10 January 2015. Soon after, Mills was later sidelined injuries twice towards the end of the season. Despite this, Mills went on to make thirty appearance for the club.
In his second season at Oldham Athletic saw Mills regained his fitness and re-established himself in the first team. Mills scored his first Oldham Athletic goal on 5 September 2015, in a 2–1 loss against Bradford City. After suffering from ankle injury, Mills made his first team return on 31 October 2015, in a 1–0 loss against Burton Albion. Mills was expected to leave the club in January, but stayed at the club at the end of the season. Mills appeared in the handful of first team until he spent the rest of the season on the substitute bench, having his first team place and made fifteen appearance for the club.
At the end of the 2015–16 season, Mills was released by the club.
On 18 May 2016, it was announced that Mills had signed for A-League side Perth Glory. Upon joining the club, Mills said moving to Australia was an opportunity he couldn't turned down.
Mills previously represented England U17 and England U18.As of match played 29 April 2017.
Mills has two older brothers, Jon-Paul and Jamie, who both play for Hellenic Football League side Witney United and was given a nickname 'Fish'. Mills is interested in cookery.
In early 2016, Mills became a father when his partner gave birth to a girl.Southampton
Football League Trophy: 2010
Football League Championship: 2011–12