- openjdk 1.8.0_272-b10
- apache-tomcat 9.0.39
- jpetsore 6
오픈시프트에서 기동되는 컨테이너는 프로젝트별로 생성된 권한으로 기동 되기 때문에 읽기/쓰기가 가능해야 한다.
- Tomcat 설정 파일의 그룹 권한을 읽기가 가능하도록 설정한다. (conf)
- Tomcat 에서 파일 쓰기가 필요한 디렉토리는 쓰기가 가능하도록 설정한다. (logs,temp,work,webapps)
- 기본적으로 1024 포트이하는 사용하지 못한다.
FROM openjdk:8
USER root
LABEL MAINTAINER="shkim@rockplace.co.kr"
ARG CATALINA_MAJOR_VER=9
ARG CATALINA_VERSION=9.0.39
ENV CATALINA_HOME=/usr/local/apache-tomcat-${CATALINA_VERSION} \
CATALINA_BASE=${CATALINA_HOME}
ADD https://downloads.apache.org/tomcat/tomcat-${CATALINA_MAJOR_VER}/v${CATALINA_VERSION}/bin/apache-tomcat-${CATALINA_VERSION}.tar.gz /usr/local
RUN cd /usr/local && tar -xf apache-tomcat-${CATALINA_VERSION}.tar.gz -C /usr/local && rm -f apache-tomcat-${CATALINA_VERSION}.tar.gz \
&& useradd -u 1000 -G root tomcat && chown -R tomcat:root ${CATALINA_HOME} \
&& chmod 750 $CATALINA_HOME/conf && chmod 640 $CATALINA_HOME/conf/* \
&& chmod 777 $CATALINA_HOME/temp $CATALINA_HOME/work $CATALINA_HOME/logs $CATALINA_HOME/webapps
ADD jpetstore.war $CATALINA_HOME/webapps/
WORKDIR $CATALINA_HOME
USER 1000
EXPOSE 8080
ENTRYPOINT ["./bin/catalina.sh","run"]
#!/usr/bin/env bash
docker build -t rockplace/tomcat:9 .
docker run --rm -p 8080:8080 rockplace/tomcat:9
http://localhost:8080
git clone https://github.com/mybatis/jpetstore-6.git
docker run -v "${PWD}:/usr/app/myapp" -v "${PWD}/m2/:/root/.m2/" -w /usr/app/myapp maven:3-jdk-8 ./mvnw clean package
jpetstore.war 파일을 docker 빌드 디렉토리로 복사후 진행
ADD jpetstore.war $CATALINA_HOME/webapps/
ADD https://github.com/nationminu/tomcat-docker-build-demo/blob/master/jpetstore.war $CATALINA_HOME/webapps/
docker build -t rockplace/tomcat:9 .
docker run --rm -p 8080:8080 rockplace/tomcat:9
http://localhost:8080/jpetstore
# docker tag rockplace/tomcat:9 bastion.ps.example.com:5000/rockplace/tomcat:9
# docker push bastion.ps.example.com:5000/rockplace/tomcat:9
The push refers to repository [bastion.ps.example.com:5000/rockplace/tomcat]
1dc1c6e8e00e: Pushed
14adae7093b3: Pushed
...
9: digest: sha256:831993e955cb491d046bff0b1fb9c47a5d2a5a29668b216b76ae864dc20b5361 size: 2430
# curl -k https://bastion.ps.example.com:5000/v2/_catalog
{"repositories":["rockplace/tomcat",.... ]}
# oc new-project webinar-demo
# oc import-image tomcat:latest --from=bastion.ps.example.com:5000/rockplace/tomcat:9 --insecure --confirm
# oc get is
NAME IMAGE REPOSITORY TAGS UPDATED
tomcat image-registry.openshift-image-registry.svc:5000/webinar-demo/tomcat latest 13 minutes ago
# oc new-app --image-stream=tomcat:latest
# oc get pod,svc
NAME READY STATUS RESTARTS AGE
pod/tomcat-69c5bd6c85-ws4v4 1/1 Running 0 18m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/tomcat ClusterIP 172.30.204.9 <none> 8009/TCP,8080/TCP 28m
# oc expose service tomcat --name=webinar-demo
# oc get route
NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD
webinar-demo-route webinar-demo.apps.ps.example.com tomcat 8080-tcp None