똑같은 일을 하는 두 서버가 있다 해도, A 서버는 한 달 전에 구성 / B 서버는 이제 막 구성했다면,
운영체제부터 컴파일러, 설치된 패키지까지 완벽하게 같기는 쉽지 xx
=> 이러한 차이점들이 A 서버는 잘 되는데 B 서버는 왜 죽었지?와 같은 장애를 발생시킨다.
이렇게 서로 모양이 다른 서버들이 존재하는 상황을 눈송이 서버 (Snowflakes Server) 이라고 한다.
이런 상황을 개선하고자 다양한 방식으로 서버 운영 기록을 저장해 두곤 한다.
가장 흔하게는 서버에서 어떤 작업을 실행할 때마다 이를 사내 문서 도구에 기록해둔다거나,
여러 서버에 동시 접속해서 한꺼번에 명령을 실행하는 도구를 사용하기도 -
하지만 문서에 적힌 대로 해도 잘 안 되는 경우 or 여러 서버를 조작할 때도 특정 서버 하나만 문제를 일으키는 경우 허다함
따라서 서버의 운영 기록을 코드화하려는 다양한 시도들이 등장하는데,
그중 도커에서 사용하는 도커파일(Dockerfile)도 앞서 이야기한 서버 운영 기록을 코드화한 것이다.
이 도커 파일로 도커 이미지를 만들 수 있는데 도커 파일이 서버 운영 기록이라면, 도커 이미지는 운영 기록을 실행할 시점
도커 파일 = 서버 운영 기록 코드화
도커 이미지 = 도커 파일 + 실행 시점
예를 들어 앞서 살펴본 앤서블의 플레이북으로 서버에 이미지매직을 설치를 한다고 가정.
1년 전에 이걸로 서버 A를 구성했고, 오늘 서버 B를 구성한다면, 두 서버에 이미지매직이 설치된 시점은 1년의 차이 발생
하지만 도커에서는 앞서 살펴본 도커 파일로 이미지를 만들어 두면, 서버가 구성되는 시점이 이미지를 만든 시점으로 고정.
이걸로 1년 전에 A 서버에 컨테이너 배포 / 오늘 B 서버에 컨테이너를 배포한다 해도, 두 컨테이너 모두 이미지매직이 설치된 시점 동일
실행 시점에 상관 없이 구성 시점을 고정할 수 있는 도커!
이것이 바로 도커가 여느 서버 구성 도구와 가장 다른 부분.
다른 도구들은 모두 도구를 실행하는 시점에 서버의 상태가 결정되지만,
도커는 작업자가 그 시점을 미리 정해둘 수 있다. (서버를 항상 똑같은 상태로 유지)
한편, 도커를 처음 접한 분들이 불편하게 여기는 부분 중 하나가 바로 도커 인데,
명령어가 어려워서라기보다는, 수정해서 다시 빌드하는 과정을 반복해야 하기 때문
게다가 빌드하는 시간이 점점 길어지다보면 마치 코드 작성 후 컴파일하는 시간처럼 느껴지기도 -
그런데 이 불편함을 다르게 바라보면 오히려 도커만의 장점이 될 수도 있다.