이미지와 컨테이너

CJY·2023년 6월 24일
0

Docker

목록 보기
2/2

이미지와 컨테이너

Images 이미지

이미지는 Docker의 핵심 구성 요소 중 하나이다(다른 하나는 "컨테이너").

이미지는 컨테이너를 위한 blueprint 또는 템플릿이다. 이미지는 읽기 전용이며, 응용 프로그램과 필요한 응용 프로그램 환경(운영 체제, 런타임, 도구 등)을 포함한다.

이미지 자체는 실행되지 않고, 대신 컨테이너로 실행될 수 있다.
마치 클래스와 인스턴스같은 느낌으로 나는 이해했다.

이미지는 미리 빌드된 것(예: DockerHub에서 찾을 수 있는 공식 이미지)이거나 Dockerfile을 정의하여 직접 이미지를 빌드할 수 있다.

Dockerfile에는 이미지를 빌드할 때 실행되는 명령이 포함되며, 각 명령은 이미지 내에 레이어를 생성한다. 레이어는 이미지를 효율적으로 다시 빌드하고 공유하는 데 사용된다.
그래서 Dockerfile 내에 명령어의 순서에 따라 이미지를 리빌드할 때 효율성이 갈릴 수 있다.

CMD 명령은 특별하다. 이미지가 빌드될 때 실행되지 않고, 해당 이미지를 기반으로 컨테이너가 생성되고 시작될 때 실행된다.

컨테이너

컨테이너는 Docker의 다른 주요 구성 요소

컨테이너는 이미지의 실행 중인 인스턴스다. 컨테이너를 생성하면(docker run을 통해), 이미지 위에 얇은 읽기-쓰기 레이어가 추가된다.

따라서 동일한 이미지를 기반으로 여러 컨테이너를 시작할 수 있다. 모든 컨테이너는 격리된 환경에서 실행되며, 응용 프로그램 상태나 작성된 데이터를 공유하지 않음.

응용 프로그램을 시작하려면 컨테이너를 생성하고 시작해야 한다. 개발 및 운영 환경에서 컨테이너가 실행된다.

주요 Docker 명령어

모든 명령에 대한 전체 목록을 보려면 명령 뒤에 --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를 실행하면 자동으로 수행된다.
profile
열심히 성장 중인 백엔드

0개의 댓글