ふたりで

Create docker image and container by Dockerfile exampl (rock9(linux)+jdk8+tomcat8.5+spring3-web) 본문

docker

Create docker image and container by Dockerfile exampl (rock9(linux)+jdk8+tomcat8.5+spring3-web)

graykang 2024. 7. 30. 14:18
728x90
반응형
SMALL

# 준비사항.

- docker(desktop)

- spring-web 프로젝트 (maven으로 빌드 생성된 war파일)

 

# 먼저 Dockerfile을 생성해 준다.

나의 경우 아래와 같이 작성되어 있다.

C:\docker-workjob\spring3-web-test\Dockerfile

# 기본 이미지로 Rocky Linux 9 사용
FROM rockylinux:9

# 필수 패키지 업데이트 및 설치
RUN dnf -y update && \
    dnf -y install java-1.8.0-openjdk wget tar

# 로케일 설정 한국어
ENV LANG=ko_KR.UTF-8
ENV LANGUAGE=ko_KR:ko
ENV LC_ALL=ko_KR.UTF-8

# 한국 시간으로 설정
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo "Asia/Seoul" > /etc/timezone

# jdk8 TLS 1.0 와 TLS 1.1 삭제 및 security.useSystemProperties= false 처리된 파일 적용
# mssql 드라이버 구버전 대응
COPY ./java.security /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.422.b05-2.el9.x86_64/jre/lib/security/java.security


# Tomcat 8.5 다운로드 및 설치
ENV TOMCAT_VERSION=8.5.81
RUN wget https://archive.apache.org/dist/tomcat/tomcat-8/v${TOMCAT_VERSION}/bin/apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    tar xzf apache-tomcat-${TOMCAT_VERSION}.tar.gz && \
    mv apache-tomcat-${TOMCAT_VERSION} /opt/tomcat && \
    rm apache-tomcat-${TOMCAT_VERSION}.tar.gz

# Tomcat 설정
ENV CATALINA_HOME /opt/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH

# server.xml 파일 수정하여 URIEncoding 설정
RUN sed -i 's/port="8080" protocol="HTTP\/1.1"/port="8080" protocol="HTTP\/1.1" URIEncoding="UTF-8"/' $CATALINA_HOME/conf/server.xml

# WAR 파일 복사 (로컬의 myapp.war 파일을 Tomcat webapps 디렉토리에 복사)
COPY test-front.war $CATALINA_HOME/webapps/

# 포트 설정
EXPOSE 8080

# Tomcat 시작 스크립트
CMD ["catalina.sh", "run"]

- java.security 파일관련된 내용은 mssql 드라이버를 최신버전을 사용할 경우  설정하지 않아도 된다.

나의 경우 docker에 올릴 서비스가 mssql 구버전을 사용하기 때문에 추가한 것이다.

 

# 다음으로 java.security 파일 수정.

아래와 명시된 부분들을 참고하여 java.security 파일내용을 수정해 준다.

- jdk.tls.disabledAlgorithms 설정에서 TLSv1 및 TLSv1.1을 제거.
- security.useSystemPropertiesFile=false 로 설정.

 

728x90
반응형
SMALL

# 다음으로 위에서 작성한 Dockerfile이 있는 폴더에 java.security 파일과 war파일을 모아주자.

나의 경우 C:\docker-workjob\spring3-web-test 폴더를 생성하고 해당 폴더 내에 아래 그림과 같이 파일들을 위치시켰다.

PS C:\docker-workJob\spring3-web-test> ls


    디렉터리: C:\docker-workJob\spring3-web-test


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----      2024-07-30  오전 10:29           1376 Dockerfile
-a----      2024-07-30   오전 9:46          56088 java.security
-a----      2024-07-29   오후 5:08       82596844 test-front.war


PS C:\docker-workJob\spring3-web-test>

 

 

# 파일 준비가 다 됐으면 해당 폴더에서 아래 명령어를 실행하여 Dockerfile을 build 하여 image를 생성해 준다.

-t 옵션은 생성할 image명을 명시하기 위해 주는 옵션이고 생성된 image명은 test-front이다.

PS C:\docker-workJob\spring3-web-test> docker build -t test-front ./
[+] Building 17.7s (12/12) FINISHED                                                                   docker:desktop-linux
 => [internal] load build definition from Dockerfile                                                                  0.0s
 => => transferring dockerfile: 1.52kB                                                                                0.0s
 => [internal] load metadata for docker.io/library/rockylinux:9                                                       2.4s
 => [internal] load .dockerignore                                                                                     0.0s
 => => transferring context: 2B                                                                                       0.0s
 => [1/7] FROM docker.io/library/rockylinux:9@sha256:d7be1c094cc5845ee815d4632fe377514ee6ebcf8efaed6892889657e5ddaaa  0.0s
 => [internal] load build context                                                                                     0.0s
 => => transferring context: 72B                                                                                      0.0s
 => CACHED [2/7] RUN dnf -y update &&     dnf -y install java-1.8.0-openjdk wget tar                                  0.0s
 => [3/7] RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime && echo "Asia/Seoul" > /etc/timezone               0.4s
 => [4/7] COPY ./java.security /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.422.b05-2.el9.x86_64/jre/lib/security/java.secu  0.1s
 => [5/7] RUN wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.81/bin/apache-tomcat-8.5.81.tar.gz &&     t  13.1s
 => [6/7] RUN sed -i 's/port="8080" protocol="HTTP\/1.1"/port="8080" protocol="HTTP\/1.1" URIEncoding="UTF-8"/' /opt  0.5s
 => [7/7] COPY test-front.war /opt/tomcat/webapps/                                                                    0.8s
 => exporting to image                                                                                                0.3s
 => => exporting layers                                                                                               0.2s
 => => writing image sha256:de3daf0907fde588e19bf4f64d79f22d7137e792d8d7eb4843edda19896a3130                          0.0s
 => => naming to docker.io/library/test-front                                                                         0.0s

 2 warnings found (use --debug to expand):
 - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 28)
 - LegacyKeyValueFormat: "ENV key=value" should be used instead of legacy "ENV key value" format (line 29)

View build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/sa43r86expuvm9najrn7vlyrm

What's next:
    View a summary of image vulnerabilities and recommendations → docker scout quickview
PS C:\docker-workJob\spring3-web-test>

 

# 생성이 완료되고 나면 아래와 같이 docker image를 조회하여 확인해 볼 수 있다.

PS C:\Users\tenpe\docker-workJob\spring3-web-test> docker images
REPOSITORY         TAG           IMAGE ID       CREATED         SIZE
test-front         latest        de3daf0907fd   2 hours ago     900MB

- docker desktop을 사용하는 경우 이후 desktop의 ui를 사용하여 모든 걸 컨트롤할 수 있다.

 

# 생성이 완료된 image는 아래와 같이 docker run 명령어로 container로 실행을 할 수 있다.

--name : container이름지정 test-front-app으로 지정,

-d : 백그라운드에서 실행 지정,

-p : 사용할 port지정,

--restart=always : docker 실행 시 같이 실행되도록 지정.

마지막은 container생성 시 사용할 image 명 : test-front

#일반적으로 실행 할때 명령어
docker run --name test-front-app -d -p 8080:8080 --restart=always test-front

#docker desktop에서 추출한 명령어 스크립트
docker run --hostname=67c03b0073c4 --env=PATH=/opt/tomcat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin --env=LANG=ko_KR.UTF-8 --env=LANGUAGE=ko_KR:ko --env=LC_ALL=ko_KR.UTF-8 --env=TOMCAT_VERSION=8.5.81 --env=CATALINA_HOME=/opt/tomcat --network=bridge --workdir=/ -p 8080:8080 --restart=no --runtime=runc -d test-front:latest
728x90
반응형
LIST

'docker' 카테고리의 다른 글

Dockerfile build by Node.js Simple Project  (0) 2024.07.24
centos7+docker+MSSQL setup & config Ing~  (0) 2022.09.08
centos7+docker+linux+mariadb setup&config  (4) 2022.08.25
Comments