WHAT IS DOCKER, AND HOW IS IT USED IN FULL-STACK DEVELOPMENT?