Skip to content

Latest commit

 

History

History
103 lines (79 loc) · 3.26 KB

Docker_Image.md

File metadata and controls

103 lines (79 loc) · 3.26 KB

Docker Images

  • 모든 컨테이너는 이미지를 기반으로 생성
  • Docker hub(중앙 이미지 저장소)에서 이미지 pull/push

docker image create

  • 특정 어플리케이션을 위한 특정 개발 환경 구축 후 사용자만의 이미지 직접 생성
  • 기본 base image에 컨테이너 변경사항이 포함된 것을 이미지로 만들면
$ docker run -it --name {Container_Name} {Image:Tag}
root@{Container_ID}# (변경 사항 진행)
  • 컨테이너 내의 변경 사항 존재
  • host로 나와 docker commit로 컨테이너를 이미지로 변환
$ docker commit -a "author" -m "Commit_Message" {Option} {Container_Name} {Image:Tag}
  • -a으로 이미지 작성자 와 -m으로 커밋 메시지를 추가해 메타 데이터를 이미지에 포함

Dockerfile

  • docker build로 컨테이너를 직접 생성 후 이미지로 docker commit 할 필요 X
  • 도구를 이용해 빌드 및 배포 자동화 가능
  • 도커 허브에 올라와 있는 이미지들은 Dockerfile를 함께 제공
  • Dockerfile은 한 줄이 하나의 명령어 [ Instruction + option ]
#---[base Image]
FROM

#---[METADATA]
LABEL

#---[Command in Conatainer]
RUN

#---[Add file to image]
ADD

#---[Working directory]
WORKDIR

#---[Port]
EXPOSE

#---[Start Container with this command]
CMD
  • FROM : Docker 이미지의 베이스 이미지를 지정

    • 사용하려는 이미지가 없다면 docker hub에서 찾아서 pull
  • LABEL: Docker 이미지에 메타데이터를 추가

    • ket:value 형태로 저장
    • 메타데이터는 Docker 이미지에 대한 정보를 제공
    • docker inspect 명령어를 사용하여 확인할 수 있습니다.
  • RUN : 이미지를 만들기 위해 컨테이너 내부에서 명령어 실행

    • RUN["Command_Line", "Arguments_1", "Argument_2", ...]
    • JSON형식의 배열
  • EXPOSE : 이미지가 사용할 포트 명시

    • 컨테이너 내부에서 사용하는 포트
    • docker run -P옵션을 사용하면 EXPOSE로 노출된 포트를 호스트에서 사용 가능한 포트에 차례로 연결
    • 컨테이너가 호스트의 어떤 포트와 연결되어 있는지 확인 필요

Docker image create

$ docker build -t {Image}:{Tag} -f {Absolute_path_of_Dockerfile} /

$ docker build -t hello:1.0 -f /home/user/docker/dockerfile /

# 빌드 과정을 텍스트로 출력
$ docker build -t hello:1.0 -f /home/user/docker/dockerfile / --progress=plain
  • build 명령어의 끝에는 Dockerfile이 저장된 경로 입력
    • 로컬에 저장된 Dockerfile이 아닌 외부 에서 가져오는 경우 외부 URL 입력 가능

Cache with Docker Image

  • 이미지를 빌드 이후 같은 빌드를 하면 이전의 이미지 빌드에 사용된 캐시 이용
  • 이미지 빌드 중 용량 초과 오류일 때 캐시 삭제
# Remove build cache
$ docker builder prune
# 또는 이미지 생성 시점 명령어 추가
$ docker build --no-cache -t hello:1.0 -f /home/user/docker/dockerfile /

Docker Image Delete

  • 이미지 삭제 명령어
$ docker rmi "이미지 ID"
  • TAG가 인 이미지 삭제
$ docker rmi $(docker images -f "dangling=true" -q)
# "dangling=true" : <none>인 이미지만 필터링 해줌
# -q : 이미지ID만 출력