[Inception] Docker
What is Docker ?
Docker is container technology
컨테이너 구축을 위한 도구로 컨테이너 생성 및 관리 프로세스를 단순화 합니다.
What is Container ?
소프트웨어 개발에서 표준화된 소프트웨어 유닛을 의미합니다. 기본적으로 코드 패키지이며 해당 코드를 실행하는데 필요한 종속성과 도구가 포함되어 있는지 중요합니다.
피크닉 바구니에 비교를 한다면, 소풍을 가기 위해서 음식과 접시, 집기들이 갖춰져 있습니다. 친구에게 피크닉 바구니를 공유할 수도 있고 해당 음식을 먹기 위한 접시를 놓는 거 까지 갖추어져 있는 것입니다.
and Why?
- 동일한 개발 환경에서 코드가 항상 정확한 버전으로 실행될 수 있도록 합니다.
- 팀이나 회사 내의 각각의 개발 환경을 맞출 수 있습니다.
- 프로젝트 간의 충돌하는 부분을 버전을 맞추어 줄 수 있습니다.
Image
코드와 코드를 실행하는데 필요한 도구를 포함
이미지를 기반으로 해서 여러 컨테이너를 만들 수 있다.
이미지는 모든 설정 명령과 모든 코드가 포함된 고유 가능한 패키지
이미지의 구체적인 실행 인스턴스
컨테이너는 위와 같은 이미지의 구체적인 실행 인스턴스입니다.
즉, 이미지를 기반으로 하는 컨테이너를 실행하는 것이며, 도커의 모든 것입니다.
Dockerfile
도커 이미지를 처음부터 빌드할 수 있지만, 코드에 필요한 기타 도구와 같은 운영 체제 레이어가 필요합니다.
FROM
이미지를 구축에 사용될 이름을 적습니다.
COPY
두 개의 경로를 적습니다.
첫 번째 경로는 컨테이너의 외부, 이미지의 외부 경로이며 이미지로 복사되어야 할 파일들이 있는 곳입니다.
Host file system
이 프로젝트의 모든 폴더, 하위 폴더 및 파일을 복사해야 한다고 Docker에게 알립니다. (Dockerfile을 제외)
두 번째 경로는 이미지 내부의 경로입니다.
Image/ container file system
모든 이미지와 이미지를 기반으로 생성된 모든 컨테이너를 로컬 머신의 파일 시스템에서 완전 분리된 자체 내부 파일 시스템이 있습니다.
도커 컨테이너 내부에 숨겨져 있습니다.
. : Dockerfile일 있는 동일한 폴더임을 명시
RUN
이미지에서 명령을 RUN하고 싶다고 알릴 수 있습니다.
WORKDIR
모든 명령의 default는 도커 컨테이너 및 이미지의 작업 디렉토리(컨테이너 파일 시스템의 루트 파일) 에서 실행됩니다.
모든 것을 복사하기 전에 해당 루트로 명령을 설정합니다.
EXPOSE
로컬 시스템에 특정 포트를 노출하고 싶다고 표시합니다.
CMD
이미지를 기반으로 컨테이너를 시작하는 경우에 사용됩니다.
도커에게 이미지를 기반으로 컨테이너가 생성될 때마다 실행되도록 지시합니다.
CMD에 특정하지 않으면 베이스 이미지가 실행되며, 그게 없는 경우 에러가 발생됩니다.
FROM node
WORKDIR /app
COPY . /app
RUN npm install
EXPOSE 80
CMD ["node", "server.js"]
Dockerfile 실행 (in Terminal)
// Dockerfile 폴더에서 진행
docker build .
docker run -p 3000:80 "빌드된 ID"
이미지는 인스턴스화 하여 여러가지 컨테이너에서 사용되며, 여러 컨테이너에서 사용될 때에는 저장된 환경을 사용하여 코드를 복사보다는 이미지와 그 전의 코드를 재활용하여 사용됩니다.
해당 내용은 Docker & Kubernetes 강의 중 container & image 부분을 정리한 내용입니다.