Dockerfile[2] COPY, ADD, RUN, USER
지난 게시물에 이어서 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을 출력합니다!)