프로젝트를 이미지화 하기 전에 프로젝트 내부에 DockFile을 만든다.
프로젝트를 이미지 생성하기 위한것이다.
FROM docker.io/library/tomcat:10.1.26-jdk17-temurin
WORKDIR /usr/local/tomcat
ENV TZ Asia/Seoul
ENV USE_PROFILE=tomcat
ENV JAVA_OPTS="-Dspring.profiles.active=${USE_PROFILE}"
COPY ["./target/crud.war", "/usr/local/tomcat/webapps/crud.war"]
EXPOSE 8080/tcp
ENTRYPOINT ["catalina.sh", "run"]
FROM docker.io/library/tomcat:10.1.26-jdk17-temurin
프로젝트는 springboot 3.x, jdk 17 버전이기 때문에 docker hub에서 tomcat 10, jdk 17버전으로 설치 후 위 이미지 기반으로 이미지를 만든다
WORKDIR /usr/local/tomcat
작업 디렉터리를 /usr/local/tomcat로 설정. 이후의 명령어들은 이 디렉터리로 실행된다.
ENV TZ Asia/Seoul
컨테이너 타임존 설정. 로그 및 시간 관련 작업에 영향이 있다.
ENV USE_PROFILE=tomcat
USE_PROFILE 환경변수를 tomcat으로 설정
만약 OS의 SPRING_PROFILE_ACTIVE 환경변수를 설정해주었다면 필요 없다.
해당 프로젝트 내부 환경변수에는 SPRING_PROFILE_ACTIVE가 적용 되지 않기 때문에
USE_PROFILE 적용후 아래 JAVA_OPTS도 적용해준다.
ENV JAVA_OPTS="-Dspring.profiles.active=${USE_PROFILE}"
JAVA_OPTS으로 spring profile acitve를 적용해준다
COPY ["./target/crud.war", "/usr/local/tomcat/webapps/crud.war"]
호스트의 ./target/crud.war 파일을 컨테이너의 /usr/local/tomcat/webapps/crud.war 경로로 복사.
crud.war는 배포할 웹 애플리케이션의 WAR 파일.
EXPOSE 8080/tcp
호스트의 ./target/crud.war 파일을 컨테이너의 /usr/local/tomcat/webapps/crud.war 경로로 복사.
crud.war는 배포할 웹 애플리케이션의 WAR 파일.
ENTRYPOINT ["catalina.sh", "run"]
컨테이너가 시작될 때 실행될 명령어 설정.
catalina.sh run은 Tomcat 서버를 실행하는 스크립트.
컨테이너가 시작되면 Tomcat이 실행.
프로젝트를 git에 올린 후 git clone으로 해당 repository 가져오기
target 폴더에 package 생성
해당 repository 폴더에서 실행
mvn clean package
해당 프로젝트 이미지 생성
해당 repository 폴더에서 실행
docker build -t (원하는 이미지명):(tag명) -f ./DockerFile
docker images 명령어로 이미지 생성되었는지 확인
docker image ID 확인 후 프로젝트 실행
docker run -p 8080:8080 -d (image ID)
-p 8080:8080
호스트와 컨테이너 간의 포트 매핑.
호스트의 8080포트와 컨테이너의 8080 포트를 연결한다는 뜻.
컨테이너의 프로젝트는 호스트의 8080 포트를 통해 외부와 통신할 수 있다는 뜻.
-p 9090:8080 이라면 9090으로 외부에서 접속 가능
Docker 실행시 datasource로 jndi 하게 될 경우 배포되는 tomcat context.xml을 수정해주자
나의 삽질은 context.xml 수정 안함과 jdk 버전의 오류였다.....
컨테이너 내부에 vim 설치
해당 컨테이너 shell에 진입
docker exec -it (컨테이너 ID) /bin/sh
apt-get 업데이트
apt-get update
vim 설치
apt-get install vim
편집
vi (파일명)'Docker' 카테고리의 다른 글
| [Docker] Docker 명령어 (1) | 2024.10.25 |
|---|---|
| [Docker] linux에 Docker 설치하기(Cent Os)+mariadb 설치 (0) | 2024.10.21 |