문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 마지막 판 양쪽 다음 판 | ||
docker:build [2017/02/17 10:09] kwon37xi |
docker:build [2022/02/16 14:41] kwon37xi [주의할 점] |
||
---|---|---|---|
줄 2: | 줄 2: | ||
[[: | [[: | ||
+ | ===== 주의할 점 ===== | ||
+ | * 최종 프로세스실행 사용자를 '' | ||
+ | * 그렇지 않으면 Docker Container의 프로세스가 뚫리면 Host 운영체제의 '' | ||
+ | * 항상 동일한 '' | ||
+ | * '' | ||
+ | * Timezone 을 명확히 맞춘다. | ||
+ | * multi stage build로 최소 용량이 될 수 있게 한다. | ||
+ | * 내 경험상 [[linux: | ||
===== 한 컨테이너에서 다중 프로세스 실행 ===== | ===== 한 컨테이너에서 다중 프로세스 실행 ===== | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | ===== 용량 줄이기 ===== | ||
+ | * Dockerfile 의 각 '' | ||
+ | * 따라서 '' | ||
+ | <code sh> | ||
+ | RUN yum update -y && \ | ||
+ | yum instal .... && \ | ||
+ | yum clean all | ||
+ | </ | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | ===== 실행 사용자 변경 ===== | ||
+ | * 기본적으로 root 사용자로 ENTRYPOINT, CMD 의 명령이 실행되는데 이 경우 보안상 문제가 될 수 있다. Docker 컨테이너가 해킹당하면 '' | ||
+ | * 따라서 항상 non-root 권한으로 명령을 실행할 수 있도록 해야 한다. | ||
+ | |||
+ | <code sh> | ||
+ | # alpine linux 사용자 추가 | ||
+ | RUN adduser -D -h / | ||
+ | USER worker | ||
+ | </ | ||
+ | ===== COPY와 ADD chown ===== | ||
+ | * Docker 17.x 이후부터 '' | ||
+ | <code sh> | ||
+ | COPY --chown=< | ||
+ | </ | ||
줄 16: | 줄 50: | ||
ENV TZ=Asia/ | ENV TZ=Asia/ | ||
RUN ln -snf / | RUN ln -snf / | ||
+ | </ | ||
+ | * '' | ||
+ | * [[linux: | ||
+ | |||
+ | ===== LANG ===== | ||
+ | * **UTF-8**로 인코딩 설정 필요. | ||
+ | |||
+ | <code sh> | ||
+ | ENV LANG=ko_KR.UTF-8 | ||
</ | </ | ||
줄 31: | 줄 74: | ||
===== Latest 올리기 ===== | ===== Latest 올리기 ===== | ||
+ | Local에 있는 빌드에 버전이 있는 tag 와 :latest 태그를 함께 만들고 둘 다 push 하면 된다. tag가 달라도 이미 push 된 데이터가 있으면, 중복 Push하지 않기 때문에 데이터가 중복저장되거나 하지는 않는다. | ||
+ | |||
+ | <code sh> | ||
+ | docker build --tag my/ | ||
+ | docker tag my/ | ||
+ | docker tag my/ | ||
+ | docker push my/ | ||
+ | dpcler push my/ | ||
+ | </ | ||
+ | |||
+ | ===== Multi Stage Build ===== | ||
+ | * [[https:// | ||
+ | * 소스에서 바이너리를 빌드 한 뒤에 실제로 필요한 바이너리만 최종 Docker 이미지로 만들거나 할 수 있는 방식 | ||
+ | ===== 참조 ===== | ||
+ | * [[https:// | ||
+ | * * [[https:// |