Docker Image Build 하기 및 올리기
root
로 두지말고 다른 것으로 변경하는 것이 좋다. root
권한이 뚫리게 된다.Dockerfile
에 대해 동일한 build 결과가 나오게 하지 않으면 새로운 버그 등에 직면할 수 있다.FROM
을 명시할 때 latest
를 사용하지 말고 특정 버전 번호 태그까지 명시한다.RUN
명령은 그 하나하나가 이미지로 구워지는데, RUN
명령에서 대용량 데이터를 저장했다가 그 다음 RUN
명령에서 그 파일을 지우더라도 이미지 용량을 줄어들지 않는다.RUN
명령 한 줄에 용량을 줄이는 명령까지 죽 나열 해야만 한다. yum clean all
(다운로드한 패키지 캐시 삭제) 처럼.RUN yum update -y && \ yum instal .... && \ yum clean all
apt-get
은 apt-get clean
apk
는 apk cache clean
인데, Alpine Linux Docker 부모 이미지들은 기본적으로 cache를 비활성화해서 이 명령을 실행하지 않아도 상관없는 듯. 혹은 rm -rf /var/cache/apk/*
root
권한이 host 까지 권한을 행사할 수도 있음.# alpine linux 사용자 추가 RUN adduser -D -h /home/worker worker USER worker
ADD
, COPY
시에 chown
지정 가능COPY --chown=<user>:<group> <hostPath> <containerPath>
from Docker Container time & timezone (will not reflect changes)
ENV TZ=Asia/Seoul RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
tzdata
패키지 없을 경우 미리 설치할 것.ENV LANG=ko_KR.UTF-8
JMX_PORT
를 …port, …rmi.port
두 군데 지정해주고, hostname
에 Host의 IP를 지정해준다.
-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"
docker 실행시 JMX_PORT
를 -p
로 노출시킨다.
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