Dockerfile을 생성하여 파일을 docker build 하려고 할 때 아래와 같은 에러가 발생합니다.
원인을 몰라 한참 찾아봤었는데 처음에는 뭐가 문제인지 잘몰랐었는데 Dockerfile을 만들어서
build 해줄 때 filename을 Dockerfile 이라고 만들어줘야 하는 거였다.
Dockerfile을 만들때에는 디렉토리를 새로만들고 해당 디렉토리로 들어가서 build 해줘야한다.
나는 바보인가보다 ㅠ
unable to prepare context: unable to evaluate symlinks in Dockerfile path:
$sudo docker build -t kubers:1 .unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/djwlstn123/k8s/Dockerfile: no such file or directoryEX)$sudo docker build -t kuard-amd64:1 .Sending build context to Docker daemon 2.048kBStep 1/3 : FROM alpine
RUN 명령은 현재 생성되는 과정의 이미지 위에 스크립트 또는 명령을 실행해주는 명령입니다.
실행한 결과는 새 이미지로 생성되며, 실행 내역은 이미지 히스토리에 기록됩니다.
RUN [명령어]RUN ["실행파일", "매개변수1", "매개변수2"]EX)RUN apt-get -y updateRUN /bin/bash -c
CMD
CMD 명령은 컨테이너가 시작될 때 실행할 실행 파일 또는 쉘 스크립트 명령입니다.
Dockerfile에는 하나의 CMD 명령만 있을 수 있습니다. (둘 이상의 CMD를 나열하면 마지막 CMD만 적용됩니다.)
여러 명령어를 사용하려면 따로 스크립트를 생성하여 설정해주어야합니다.
CMD ["executable","param1","param2"](exec form, this is the preferred form)CMD ["param1","param2"](as default parameters to ENTRYPOINT)CMD command param1 param2 (shell form)CMD [명령]EX)CMD ["nginx"]
ENTRYPOINT
ENTRYPOINT 명령은 컨테이너가 시작될 떄 스크립트 또는 명령을 실행합니다.
docker run, start 명령으로 정지된 컨테이너를 시작할 때 실행됩니다.
ENTRYPOINT는 Dockerfile에 단 한번만 사용할 수 있습니다.
ENTRYPOINT [명령]ENTRYPOINT ["실행파일", "매개변수1", "매개변수2"]EX)셸(/bin/sh)로 명령 실행ENTRYPOINT cat /home/study/test.text셸없이 바로 실행ENTRYPOINT ["cat", "/home/study/test.text"]
ADD
ADD 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.
절대경로를 사용할 수 없으며, 디렉토리를 지정하면 디렉토리 모든 파일을 복사합니다.
인터넷에 있는 URL을 설정할 수 있습니다.
ADD [복사할 파일 경로][이미지에 파일이 위치할 경로]EX)ADD *.txt /root/
COPY
COPY 명령은 새로운 파일이나 또는 디렉토리를 이미지로 복사하는 명령입니다.
ADD 명령과 달리 URL을 사용할 수 없으며 압축 파일 그대로 복사됩니다. 절대경로 방식으로 설정해야 합니다.
COPY [복사할 파일 경로][파일이 위치할 경로]EX)COPY test.txt relativeDir/
ENV
ENV 명령은 환경 변수를 설정하는 명령입니다.
ENV로 설정한 변수는 RUN, CMD, ENTRYPOINT에 적용됩니다.
ENV [환경변수][값]EX)ENV PATH /go/bin:$PATH
EXPOSE
EXPOSE 명령은 호스트와 연결할 포트 번호를 설정하는 명령입니다.
docker run --expose 옵션과 같은 설정입니다.
EXPOSE [포트번호]EX)EXPOSE 80EXPOSE 443
USER
USER 명령은 실행할 사용자 계정을 설정하는 명령입니다.
RUN, CMD, ENTRYPOINT에 적용됩니다.
USER [계정 사용자명]EX)USER nobody
VOLUME
VOLUME 명령은 디렉토리의 내용을 컨테이너에 저장하지 않고 외부 호스트(파일시스템)에 저장하도록 설정하는 명령입니다.