이미지는 Docker의 핵심 구성 요소 중 하나이다(다른 하나는 "컨테이너").
이미지는 컨테이너를 위한 blueprint 또는 템플릿이다. 이미지는 읽기 전용이며, 응용 프로그램과 필요한 응용 프로그램 환경(운영 체제, 런타임, 도구 등)을 포함한다.
이미지 자체는 실행되지 않고, 대신 컨테이너로 실행될 수 있다.
마치 클래스와 인스턴스같은 느낌으로 나는 이해했다.
이미지는 미리 빌드된 것(예: DockerHub에서 찾을 수 있는 공식 이미지)이거나 Dockerfile을 정의하여 직접 이미지를 빌드할 수 있다.
Dockerfile에는 이미지를 빌드할 때 실행되는 명령이 포함되며, 각 명령은 이미지 내에 레이어를 생성한다. 레이어는 이미지를 효율적으로 다시 빌드하고 공유하는 데 사용된다.
그래서 Dockerfile 내에 명령어의 순서에 따라 이미지를 리빌드할 때 효율성이 갈릴 수 있다.
CMD 명령은 특별하다. 이미지가 빌드될 때 실행되지 않고, 해당 이미지를 기반으로 컨테이너가 생성되고 시작될 때 실행된다.
컨테이너는 Docker의 다른 주요 구성 요소
컨테이너는 이미지의 실행 중인 인스턴스다. 컨테이너를 생성하면(docker run을 통해), 이미지 위에 얇은 읽기-쓰기 레이어가 추가된다.
따라서 동일한 이미지를 기반으로 여러 컨테이너를 시작할 수 있다. 모든 컨테이너는 격리된 환경에서 실행되며, 응용 프로그램 상태나 작성된 데이터를 공유하지 않음.
응용 프로그램을 시작하려면 컨테이너를 생성하고 시작해야 한다. 개발 및 운영 환경에서 컨테이너가 실행된다.
모든 명령에 대한 전체 목록을 보려면 명령 뒤에 --help
를 추가하면 됨.
예: docker --help
, docker run --help
등.
공식 문서 https://docs.docker.com/engine/reference/run/
docker build .
: Dockerfile을 빌드하고 파일을 기반으로 이미지를 생성.-t NAME:TAG
: 이미지에 이름과 태그를 할당.docker run IMAGE_NAME
: 이미지 이름 IMAGE_NAME (또는 이미지 ID)을 기반으로 새 컨테이너를 생성하고 시작.--name NAME
: 컨테이너에 이름을 할당. 이름은 중지 및 제거 등에 사용할 수 있음.-d
: 컨테이너를 분리(detached) 모드로 실행. 즉, 컨테이너에서 출력이 표시되지 않으며 명령 프롬프트/터미널이 컨테이너의 종료를 기다리지 않음.-it
: "대화형(interactive)" 모드로 컨테이너를 실행. 이 모드에서는 컨테이너/응용 프로그램이 명령 프롬프트/터미널을 통해 입력을 받을 수 있다. -it 플래그를 사용하면 컨테이너를 CTRL + C로 중지할 수 있음.--rm
: 컨테이너가 중지되면 자동으로 컨테이너를 제거.docker ps
: 실행 중인 모든 컨테이너 목록을 표시.-a
: 중지된 컨테이너를 포함하여 모든 컨테이너 목록을 표시.docker images
: 로컬에 저장된 모든 이미지 목록을 표시.docker rm CONTAINER
: 이름이 CONTAINER인 컨테이너를 제거(컨테이너 ID도 사용할 수 있음).docker rmi IMAGE
: 이름 또는 ID로 이미지를 제거.docker container prune
: 중지된 모든 컨테이너를 제거.docker image prune
: 미사용 태그가 있는 모든 이미지(미태그된 이미지)를 제거.-a
: 로컬에 저장된 모든 이미지를 제거.docker push IMAGE
: 이미지를 DockerHub(또는 다른 레지스트리)에 푸시한다. 이미지 이름/태그에는 저장소 이름/URL이 포함되어야 한다.docker pull IMAGE
: DockerHub(또는 다른 레지스트리)에서 이미지를 풀(다운로드). 이미지가 이전에 풀되지 않았다면 docker run IMAGE
를 실행하면 자동으로 수행된다.