Docker에 대해 간단한 개념, 명령어 들을 알아봅시다.
Docker 란?
Chat gpt에게 Docker가 무엇인지 물어봤습니다.

이말만 듣고는 잘 이해가 가지 않습니다. 이해가 가기 쉽게 설명을 해보도록 하겠습니다.
이전에는 한대의 서버에 한개의 프로그램만 돌려 비용적으로나 성능적으로나 비효율적인 상황이 발생했는데요. 그래서 한대의 서버내에 여러 프로그램들을 올릴수있는 방법을 연구하다가 생겨난 기술이 바로 가상화기술입니다.

이 가상화 기술은 가상머신, 즉 VM(Virtual Machine)이라는 방식을 사용하였으나, 이 VM기술은 한 대의 서버에 여러 OS가 올라가다보니 프로그램을 구동시키는데 시간도 오래걸리고, 무거운 단점이 있었습니다. 이러한 단점을 극복하고자 발생한 개념이 바로 컨테이너 기술입니다. 위 사진을 보시면 Guest OS가 올라가지않고, Container Engine으로 프로그램을 경량화 시킬수 있는것을 볼 수 있습니다.
자 이제 그럼 Docker 가 무엇인지 궁금 하실껀데요. Docker는 원래 항만에서 일하는 부두 노동자를 의미하는데요. 부두 노동자들이 컨테이너들을 관리하고, 옮기는 역할을 하듯, 이 Docker도 서버 상에서 우리가 만든 컨테이너들을 관리하는 프로그램이라고 볼 수 있습니다. 나중에 말씀드리겠지만, 이 컨테이너가 수백개, 수천개 되면 관리하기가 어려워지는데 이 수많은 컨테이너들을 관리하는것을 Container ochestration 이라하며, 대표적인 플랫폼이 바로 그 유명한 Kubernetes 입니다.
Docker 프로세스
자 그럼 Docker에 대해 간략히 알아보았으니, docker가 구동되는 프로세스에 대해 알아봐야겠죠.
프로세스 흐름을 설명드리자면,

1) 개발자가 application 코딩을 합니다.
2) Dockerfile을 작성해줍니다.
- Dockerfile은 이미지 생성 과정을 정의하는 스크립트입니다.
3) 이미지를 생성해줍니다.
- 이미지는 컨테이너를 생성하는 템플릿입니다. 불변의 파일 시스템과 애플리케이션, 의존성을 포함합니다.
- docker build 명령어로 Dockerfile을 빌드하여 이미지를 생성합니다
- 데몬은 Dockerfile을 읽고 이미지를 빌드합니다.
4) yaml파일로 작성된 서비스를 정의합니다.(선택입니다)
5) 컨테이너 생성 및 실행
- docker run 명령어로 이미지를 실행하여 컨테이너를 생성합니다.
6) app을 테스트해봅니다.
7) 이미지 저장
- 이미지를 레지스트리에 저장합니다.
- docker push 명령어로 이미지를 레지스트리에 업로드합니다.
- Git을 활용하여, Dockerfile을 관리할 수있습니다.
8) 이미지 다운로드 (기존이미지가 있을때 활용하는 방법입니다)
- 이미지를 레지스트리에서 다운로드합니다.
- docker pull 명령어로 이미지를 로컬 시스템에 가져옵니다.
참고자료