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 cleanapk는 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