사용자 도구

사이트 도구


docker:build

문서의 이전 판입니다!


Docker Image Build

Docker Image Build 하기 및 올리기

한 컨테이너에서 다중 프로세스 실행

용량 줄이기

  • Dockerfile 의 각 RUN 명령은 그 하나하나가 이미지로 구워지는데, RUN 명령에서 대용량 데이터를 저장했다가 그 다음 RUN 명령에서 그 파일을 지우더라도 이미지 용량을 줄어들지 않는다.
  • 따라서 RUN 명령 한 줄에 용량을 줄이는 명령까지 죽 나열 해야만 한다. yum clean all(다운로드한 패키지 캐시 삭제) 처럼.
RUN yum update -y && \
yum instal .... && \
yum clean all
  • apt-getapt-get clean
  • apkapk cache clean 인데, Alpine Linux Docker 부모 이미지들은 기본적으로 cache를 비활성화해서 이 명령을 실행하지 않아도 상관없는 듯.

실행 사용자 변경

  • 기본적으로 root 사용자로 ENTRYPOINT, CMD 의 명령이 실행되는데 이 경우 보안상 문제가 될 수 있다. Docker 컨테이너가 해킹당하면 root' 권한이 host 까지 권한을 행사할 수도 있음. * 따라서 항상 non-root 권한으로 명령을 실행할 수 있도록 해야 한다. ===== ENTRYPOINT ===== * run/start 후 docker 컨테이너 내부에서 실행할 스크립트 * PYRASIS.COM: 가장 빨리 만나는 Docker 7장 - 6. ENTRYPOINT ===== Timezone 보정 ===== from Docker Container time & timezone (will not reflect changes) <code> ENV TZ=Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone </code> * tzdata 패키지 없을 경우 미리 설치할 것. * Alpine Linux 도 참조. ===== LANG ===== * UTF-8로 인코딩 설정 필요. <code sh> ENV LANG=ko_KR.UTF-8 </code> ===== JAVA JMX ===== JMX_PORT…port, …rmi.port 두 군데 지정해주고, hostname에 Host의 IP를 지정해준다. <code> -Dcom.sun.management.jmxremote=true \ -Dcom.sun.management.jmxremote.port=$JMX_PORT \ -Dcom.sun.management.jmxremote.rmi.port=$JMX_PORT \ -Dcom.sun.management.jmxremote.ssl=false \ -Dcom.sun.management.jmxremote.authenticate=false \ -Djava.rmi.server.hostname=$HOST_IP“ </code> docker 실행시 JMX_PORT-p''로 노출시킨다.

Latest 올리기

Local에 있는 빌드에 버전이 있는 tag 와 :latest 태그를 함께 만들고 둘 다 push 하면 된다. tag가 달라도 이미 push 된 데이터가 있으면, 중복 Push하지 않기 때문에 데이터가 중복저장되거나 하지는 않는다.

docker build --tag my/name:customversion .
docker tag my/name:customversion my/name:customversion
docker tag my/name:customversion my/name:latest
docker push my/name:customversion
dpcler push my/name:latest

Multi Stage Build

  • 소스에서 바이너리를 빌드 한 뒤에 실제로 필요한 바이너리만 최종 Docker 이미지로 만들거나 할 수 있는 방식
docker/build.1543885586.txt.gz · 마지막으로 수정됨: 2018/12/04 10:06 저자 kwon37xi