Попробуйте использовать display: flex;
, доступный в начальной загрузке, что обеспечивает большую гибкость при выравнивании элементов по центру, а не при использовании столбцов и добавлении дополнительных стилей CSS для выравнивания. Надеюсь, этот пример кода поможет
<div class="container">
<div class="row">
<div class="col-lg-4 m-auto">
<div class="card d-flex flex-row align-items-center justify-content-center bg-white mt-5">
<img class="mx-4" src="https://via.placeholder.com/150">
<div class="d-flex flex-column flex-grow-1">
<div class="card-title text-black align-self-baseline">
<h5 class="text-center py-2 font-weight-bold mb-0 mt-2">Register</h5>
</div>
<div class="card-body">
<form action="process.php" method="POST">
<input type="text" name="lname" placeholder="Lastname" class="form-control mb-2">
<input type="text" name="fname" placeholder="Firstname" class="form-control mb-2">
<input type="text" name="email" placeholder="Email address" class="form-control mb-2">
<input type="text" name="passw" placeholder="Password" class="form-control mb-2">
<input type="text" name="passw2" placeholder="Re-enter password" class="form-control mb-2">
<button class="btn btn-success btn-block mt-3" name="register" class="pt-3">Register</button>
<div class="text-center mt-3" style="font-size: 14px;">Already have an account?
<a href="signup.php" class="alert-link">Login</a>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>