일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- popup
- config
- nodejs
- SpringBoot
- node.js
- Eclipse
- docker
- jenkins
- MSsql
- rocky9
- yona
- ajax
- centos7
- Java
- mybatis
- javascript
- Next.js
- Maven
- git
- mysql
- Push
- submit
- security
- NextJS
- jquery
- FCM
- PM2
- pwa
- spring3
- MariaDB
- Today
- Total
ふたりで
Create docker image and container by Dockerfile exampl (rock9(linux)+jdk8+tomcat8.5+spring3-web) 본문
Create docker image and container by Dockerfile exampl (rock9(linux)+jdk8+tomcat8.5+spring3-web)
graykang 2024. 7. 30. 14:18# 준비사항.
- 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 로 설정.
# 다음으로 위에서 작성한 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
'docker' 카테고리의 다른 글
docker+mongodb+mongodump+mongorestore (0) | 2025.01.07 |
---|---|
docker-desktop + mongodb compose (0) | 2025.01.06 |
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 |