2024 09 18
2024-09-18¶
Dockerfile 만들기¶
✘ joelonsw ~/Desktop/TIL/2024-09/docker-learn master ±✚ docker inspect joel-jdk17:latest
[
{
"Id": "sha256:2792c873aaf92da2c9da02fa233e714333006f158312f0d84f86f1b05d9f1a5e",
"RepoTags": [
"joel-jdk17:latest"
],
"RepoDigests": [],
"Parent": "",
"Comment": "",
"Created": "2022-04-27T23:29:54.241265971Z",
"Container": "",
"ContainerConfig": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": null,
"Cmd": null,
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"DockerVersion": "",
"Author": "",
"Config": {
"Hostname": "",
"Domainname": "",
"User": "",
"AttachStdin": false,
"AttachStdout": false,
"AttachStderr": false,
"Tty": false,
"OpenStdin": false,
"StdinOnce": false,
"Env": [
"PATH=/usr/java/openjdk-17/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"JAVA_HOME=/usr/java/openjdk-17",
"LANG=C.UTF-8",
"JAVA_VERSION=17.0.2"
],
"Cmd": [
"jshell"
],
"Image": "",
"Volumes": null,
"WorkingDir": "",
"Entrypoint": null,
"OnBuild": null,
"Labels": null
},
"Architecture": "arm64",
"Variant": "v8",
"Os": "linux",
"Size": 501295850,
"VirtualSize": 501295850,
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/0fdaeb093099c0fdfe76f79e39bcb9ee4d36b9aee5620f074fbf4aeb3c81b09b/diff:/var/lib/docker/overlay2/988f61c4765aef97beabe911dee4694d4e418df89d122861a1b677e8bda4311d/diff",
"MergedDir": "/var/lib/docker/overlay2/1cb721dc0c3721f37e5001c85b65133ba6cbed91c447cd08e7aa7e2a3af1ced0/merged",
"UpperDir": "/var/lib/docker/overlay2/1cb721dc0c3721f37e5001c85b65133ba6cbed91c447cd08e7aa7e2a3af1ced0/diff",
"WorkDir": "/var/lib/docker/overlay2/1cb721dc0c3721f37e5001c85b65133ba6cbed91c447cd08e7aa7e2a3af1ced0/work"
},
"Name": "overlay2"
},
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:b0d4c4485e7e7fdd7cb6a595a4845c47e39fdfac598fde0fbd8f327423ceb5a0",
"sha256:03ee828ef0e49649de4f809d41b8cb2c29e193269f809d3de2a5b6021bc44cec",
"sha256:e017d39c755a5133aebbe26075334984cb9a3e18ff9a6790123072fd1f2d3c53"
]
},
"Metadata": {
"LastTagTime": "2024-09-18T06:15:53.757736095Z"
}
}
]
- ENTRYPOINT : 실행 이후 첫빠따로 돌아갈 명령어
- 이미지 기반으로 생성된 컨테이너 실행 이후, 실행될 기본 명령어 지정
- RUN : 이미지 생성 과정에서 생기는 명령어
- Docker build를 하는 시점에 이미지 생성 과정에서 특정 명령어 수행
라운지용 도커파일¶
- Dockerfile에 JDK를 설치하는 과정을 기입했을 때, 매번 Docker build 시 마다 재 설치 되지 않을까 했지만...
- 이미지 레이어 재사용으로 인해 그러진 않음. 캐싱된 레이어를 그대로 재사용
- 파일 시스템에 변경이 가해질 때마다 이미지 레이어에 변경이 생김 (늘어감)
- Dockerfile
# private 도커 레지스트리에서 rocky8 리눅스 가져오기 FROM idock.dkao.io/kbase/rocky8:latest # 프록시 설정 ## 기업용 네트워크 에서는 이걸 좀 쓰는 이유들이 있음 - 보안, 성능, 접근제어, 익명성 ## 많은 HTTP/HTTPS 요청에 프록시를 사용할 것 ### curl, wget 등에 사용, 다만 본인 고유의 프록시 세팅이 있는 어플리케이션은 무시할 수도 RUN echo 'export http_proxy=http://proxy.joel.io' >> ~/.bashrc RUN echo 'export HTTP_PROXY=$http_proxy' >> ~/.bashrc RUN echo 'export https_proxy=$http_proxy' >> ~/.bashrc RUN echo 'export HTTPS_PROXY=$http_proxy' >> ~/.bashrc # 프록시 요청에서 제외할 도메인 설정 RUN echo 'expo no_proxy="localhost, 127.0.0.1, 127.0.0.0/8, 192.168.0.0/16"' >> ~/.bashrc RUN echo 'export NO_PROXY=$no_proxy' >> ~/.bashrc # 필요한 패키지 설치 RUN yum install gcc glibc glibc-common openssl wget unzip -y # Java 설치 WORKDIR /usr/java RUN wget https://github.com/adoptium/temurin11-binaries/releases/download/jdk-11.0.24%2B8/OpenJDK11U-jdk_x64_linux_hotspot_11.0.24_8.tar.gz RUN tar zvxf OpenJDK11U-jdk_x64_linux_hotspot_11.0.24_8.tar.gz RUN rm -f OpenJDK11U-jdk_x64_linux_hotspot_11.0.24_8.tar.gz # 심볼릭 링크 ## /usr/java/jdk11 -> usr/java/jdk-11.0.24+8 ## usr/java/default -> /usr/java/jdk11 RUN ln -s /usr/java/jdk-11.0.24+8 jdk11 RUN ln -s /usr/java/jdk11 /usr/java/default # 환경 변수 ## JAVA_HOME -> /usr/java/default ## PATH -> JAVA_HOME/bin ENV JAVA_HOME=/usr/java/default ENV PATH=$PATH:$JAVA_HOME/bin # SBT 설치 WORKDIR /usr/local RUN wget https://github.com/sbt/sbt/releases/download/v1.3.13/sbt-1.3.13.zip RUN unzip -q sbt-1.3.13.zip; RUN mkdir /usr/local/src/sbt && cp -R -f /usr/local/src/sbt /usr/local/sbt-1.3.13; RUN ln -s /usr/local/sbt-1.3.13 /usr/local/sbt; RUN ln -s /usr/local/sbt/bin/sbt /usr/local/bin/sbt; # NODE 설치 WORKDIR /opt RUN wget https://nodejs.org/dist/v16.13.0/node-v16.13.0-linux-x64.tar.xz RUN tar xvf node-v16.13.0-linux-x64.tar.xz RUN rm -f node-v16.13.0-linux-x64.tar.xz RUN ln -s /opt/node-v16.13.0-linux-x64/bin/node /usr/bin/ RUN ln -s /opt/node-v16.13.0-linux-x64/lib/node_modules/npm/bin/npm-cli.js /usr/bin/npm ENV PATH=$PATH:/opt/node-v16.13.0-linux-x64/bin RUN npm install -g ncp RUN npm install -g rimraf
SpringBoot 테스트용 도커파일¶
# 경량화된 베이스 이미지
FROM apline:latest
# 필수 패키지 업데이트/설치
RUN apk update && apk add --no-cache bash curl
# OpenJDK 17 설치
RUN apk add --no-cache openjdk17
# 작업 디렉토리 설정
WORKDIR /app
# Jar 복사
COPY build/libs/test-0.0.1-SNAPSHOT.jar /app/app.jar
# Java 환경변수(이런건 하나하나 배시 들어가서 쳐도 될듯)
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk
ENV PATH="$JAVA_HOME/bin:${PATH}"
# SpringBoot 사용할 포트 노출
EXPOSE 8080
# SpringBoot app 실행
ENTRYPOINT ["java", "-jar", "/app/app.jar"]