인프라/Docker

Dockerfile[2] COPY, ADD, RUN, USER

yo_onHJ 2020. 7. 21. 12:51

지난 게시물에 이어서 Dockerfile 구문에 대해 추가로 알아보겠습니다.

2020/07/17 - [분류 전체보기] - Dockerfile

 

 

COPY <source_file><image안의 절대 path>

source_file은 context를 기준으로 함 (.dockerignore에 등록파일 제외)

context외의 file과 path는 지정 불가

절대 path 불가

file URL 사용 불가

압축 해제 안함

타겟path가 /로 끝나는 경우는 path를 생성함

UID/GID는 root, 기존 permission으로 추가

 

 

ADD <source_file><image안의 절대 path>

source_file은 context를 기준으로 함 (.dockerignore에 등록파일 제외)

context외의 file과 path는 지정 불가

절대 path 불가

file URL 사용 가능

압축 해제 (빨간 부분만 COPY와 달라요!! )

타겟path가 /로 끝나는 경우는 path를 생성함

UID/GID는 root, 기존 permission으로 추가

 

.dockerignore 파일이란?

Dockerfile과 같은 위치에 있는 모든 파일

build시 docker엔진에 전송(불필요 파일 없어야 함)

 

 

RUN 명령 | ["<실행파일>", "<매개변수1>", '<매개변수2>" ,,, ]

build 시점에 처리하여 이미지로 생성 -> 이미지 history에 기록

shell script 구문 사용가능

FROM base image에 포함된 /bin/sh를 이용해 처리 (처리 안했다면 배열처리)

실행 결과는 caching되고 다음 build시 재사용 가능 

 

USER <사용자명>

명령을 실행할 USER 정의

정의 후에 처리되는 CMD/RUN/ENTRYPOINT에 적용함

↑ 이번에도 여전히 user라는 디렉터리를 만들어 충돌을 피합시다! 

Dockerfile의 내용은 ubuntu에서 가져와서<FROM> , build할 때 mkdir, touch, useradd 명령이 실행되도록 하며<RUN>

USER를 student로<USER> touch를 실행하며<RUN> 결과는 ls -l명령을 하도록<CMD> 설정하였습니다! 

(더 자세히 풀어보자면! , /share 디렉터리에 hello.txt 라는 빈 파일을 만들고 student라는 유저를 생성하고, (첫 단락)

student를 유저로 지정하여 /share 디렉터리 안에 student.txt라는 빈 파일을 만들고 /share 디렉터리를 ls -l의 결과물을 내보내라는 것입니다! )

$ docker build -t test:user user

↑test 이미지 네임, user 태그로 build를 시켜 이미지를 생성시킵니다!

우리는 user파일을 생성했으니 user파일에 이미지를 생성!!  

run을 통해 컨테이너에 접속합니다.

 ( --rm 옵션의 경우에는 ! 테스트 목적으로 실행하고 바로 삭제되도록 하기 위함입니다!! )

이때, 결과물은 test이미지안의 내용이었던 ls -l /share을 출력합니다!)