docker에 대하여 3
→ Dockerfile

Dockerfile

Dockerfile 명령 종류

dockerfile

Dockerfile 작성 1

mkdir sample $$ cd $_ # sample이란 디렉토리 생성 후 해당 디렉토리로 이동
touch Dockerfile
ls # 결과로 Dockerfile 파일이 조회됨

Dockerfile 작성2(Dockerfile 빌드)

dockerfile-build1

dockerfile-build2

docker build -t sample:1.0 .

→ 현재 위치에 있는 Dockerfile을 default로 찾고, 그 파일의 내용을 읽어 해당 이미지를 sample이란 이미지로 생성(build) 한다는 내용

임의의 이름으로 설정된 Dockerfile로 빌드

# 이름이 Dockerfile이 아니라 Dockerfile2.base 라고 가정
docker build -t sample -f Dockerfile2.base .

→ 현재 위치에있는 Dockerfile2.base 파일의 내용을 읽어 sample 라는 이미지 이름으로 빌드
단, 이렇게 Dockerfile이 임의의 이름일 때는 Docker Hub에서 이미지의 자동 생성 기능을 사용할 수 없다는 단점.

Docker 이미지의 레이어 구조

예를들어,

# STEP : 1 ubuntu (베이스 이미지)
FROM ubuntu:latest

# STEP : 2 Nginx 설치
RUN apt-get update && apt-get install -y -q nginx

# STEP : 3 파일 설치
COPY index.html /usr/share/nginx/html

#STEP : 4 Nginx 시작
CMD ["nginx", "-g", "daemon off;"]

이렇게 되면 단계별로 이미지가 4번 작성된다.

A → A+B → A+B+C → A+B+C+D

여기서 베이스 이미지를 바탕으로 여러개의 이미지가 작성되면서 베이스 이미지의 레이어가 공유된다. 이에 따라 디스크 용량을 효율적으로 이용한다.

RUN 명령

Dockerfile

FROM ubuntu:latest

RUN echo hi this is shell mode   #1
RUN ["echo", " 안녕하세요 Exec형식 입니다"]   #2
RUN ["/bin/bash","-c", "echo '안녕하세요 Exec형식에서 bash를 사용해 보았습니다'"]   #3
  • Docker ‘이미지를 생성할 때’ 실행됨

  • 두 가지 기술 방법이 있음

    • Shell형식 (위에서 #1번 방식)

      • 기본적으로 /bin/sh -c 를 사용하여(경유하여) 명령을 실행했을 때와 동일하게 작동

      • 예를들어 RUN apt-get install -y nginx #Nginx설치

      • 기본 쉘을 변경하고 싶을 때는 SHELL명령을 사용

        • Linux의 기본 쉘은 [“/bin/sh”, “-c”]

        • Windows는 [“cmd”, “/S”, “/C”]

        • SHELL을 통해 기본 쉘을 /bin/bash로 변경하여 RUN 을 실행하는 방법은

          SHELL ["/bin/bash", "-c"]
                  
          RUN echo hello
          

          그럼 이 후 부터 Dockerfile 안에서 Shell 형식으로 지정한 RUN명령이나 CMD명령, ENTRYPOINT 명령에서 유효해짐

    • Exec형식

      • 쉘을 경유하지 않고 직접 실행됨. 따라서 명령 인수에 $HOME과 같은 환경변수를 지정할 수 없음
      • 실행하고 싶은 명령을 JSON배열로 지정하게됨
      • 다른 쉘을 이용하고 싶을 때는 RUN명령에 쉘의ㅣ 경로를 지정한 후 실행하고 싶은 명령을 지정 예를 들어 /bin/bash 에서 apt 명령을 사용하여 nginx를 설치하고자 할때 RUN ["/bin/bash", "-c", "apt-get install -y nginx"]

위의 Dockerfile을 토대로 빌드

docker build -t run-sample .

docker-runsample

명령어 실행하면 run-sample이라는 이름의 이미지가 생성된다.

docker-runsample2

이미지가 생성될 때 어떤 명령이 실행 되는지 히스토리 보기

docker history {이미지명}

docker-history

Leave a comment