영어로 읽기

다음을 통해 공유


Microsoft Build of OpenJDK의 컨테이너 이미지

이 문서에서는 Microsoft Build of OpenJDK에 사용할 수 있는 컨테이너 이미지에 대한 정보를 제공합니다.

Linux 기반 이미지

현재 Azure Linux로 알려진 Ubuntu 및 Microsoft CBL-Mariner용 Linux 기반 컨테이너 이미지를 제공합니다. 이미지는 에 있는 mcr.microsoft.com/openjdk/jdkMicrosoft 아티팩트 레지스트리 게시됩니다.

특정 태그에 대한 최신 이미지를 끌어오려면 다음 명령을 사용합니다.

docker pull mcr.microsoft.com/openjdk/jdk:<tag>

다음 표에서는 Linux 배포 및 JDK 버전에 사용할 태그를 보여 줍니다.

기본 OS OpenJDK 21 OpenJDK 17 OpenJDK 11 OpenJDK 8
Ubuntu 22.04 21-ubuntu 17-ubuntu 11-ubuntu 해당 사항 없음
CBL Mariner 2.0 21-mariner 17-mariner 11-mariner 8-mariner
CBL-Mariner 2.0 배포판 21-distroless 17-distroless 11-distroless 8-distroless

참고: Eclipse Adoptium 프로젝트의 Eclipse Temurin 이진 파일이 있는 OpenJDK 8에 대한 이미지입니다.

아키텍처

위의 이미지는 아키텍처와 arm64 아키텍처 모두 amd64 에 대해 제공됩니다. 컨테이너 런타임은 사용자 환경에 따라 올바른 이미지를 끌어와야 합니다. 특정 아키텍처에 대한 이미지 끌어오기를 강제 적용하려면 다음을 사용합니다.

$ docker pull --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner

내부 아키텍처를 Dockerfile강제 적용하려면 다음을 사용할 수 있습니다.

FROM --platform=linux/arm64 mcr.microsoft.com/openjdk/jdk:21-mariner AS build
# ...

다중 플랫폼 컨테이너 이미지를 빌드하는 방법에 대한 자세한 내용은 컨테이너 런타임의 설명서를 확인하세요. 예를 들어 Docker 및 Podman입니다.

이러한 이미지를 사용하는 방법

다음 내용으로 Dockerfile을 만듭니다.

# Example using MS Build of OpenJDK image directly
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

배포판 없는

배포판 없는 이미지는 Microsoft의 CBL-Mariner 2.0 배포를 기반으로 합니다. 애플리케이션을 배포하려면 다른 접근 방식이 필요합니다. 배포판 없는 이미지에는 전체 Linux 배포판이 없으므로 예를 들어 셸이 없습니다.

ENTRYPOINT 이러한 이미지의 명령은 이미 명령을 가리키도록 구성되어 있습니다java. Dockerfiles사용하는 경우 명령을 사용하여 CMD JVM 시작 관리자 프로세스의 명령줄 인수를 완료해야 합니다.

다음 내용으로 Dockerfile을 만듭니다.

FROM mcr.microsoft.com/openjdk/jdk:21-distroless

COPY app.jar /app.jar

CMD ["-Xmx256m", "-jar", "/app.jar"]

다른 기본 OS 이미지 또는 버전 사용

다른 OS 기본 이미지 배포를 사용하려는 경우 다음 예제와 유사하게 Dockerfile의 명령을 사용하여 COPY --from 기존 미리 빌드된 이미지에서 JDK를 복사할 수 있습니다.

# Example using MS Build of OpenJDK image with a different base image
FROM debian:buster-slim
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:21-ubuntu $JAVA_HOME $JAVA_HOME

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

또는 파일을 추출하고 그에 따라 구성 JAVA_HOME 하기만 하면 JDK yum apt-gettar.gz 설치할 수도 있습니다. 자세히 알아보세요.

다른 버전의 Ubuntu 사용

다른 버전의 Ubuntu 기본 이미지에 OpenJDK의 Microsoft Build를 배포하려면 사용자가 직접 Dockerfiles작성하는 것이 좋습니다. 참조를 위해 아래 Dockerfile 는 Ubuntu 24.04를 사용하여 이미지를 빌드합니다.

# Example using MS Build of OpenJDK image with a different version of Ubuntu
FROM ubuntu:24.04
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=mcr.microsoft.com/openjdk/jdk:21-ubuntu $JAVA_HOME $JAVA_HOME

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

Alpine 이미지

Microsoft는 Alpine 기반 이미지를 제공하지 않지만 Alpine Linux용 머슬 컴파일 JDK 이진 파일의 제한된 집합을 제공합니다.

사용자는 사용 가능한 이진 파일을 사용하여 Alpine Linux용 컨테이너 이미지를 만들 수 있습니다.

다음 내용으로 Dockerfile을 만듭니다.

FROM alpine:latest

ENV JAVA_HOME=/usr/lib/jdk
ENV PATH=${PATH}:${JAVA_HOME}/bin

# Default to UTF-8 file.encoding
ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8'

# (Optional) Add extra packages for fontconfig and ttf-dejavu to support server-side image generation
RUN apk add --no-cache fontconfig libretls musl-locales musl-locales-lang ttf-dejavu tzdata zlib \
    && rm -rf /var/cache/apk/*

# Download and extract JDK 17
RUN wget -nv -O jdk.tar.gz https://aka.ms/download-jdk/microsoft-jdk-17-alpine-x64.tar.gz && \
    mkdir $JAVA_HOME && \
    tar xf jdk.tar.gz -C $JAVA_HOME --strip-components 1 --no-same-owner

# Copy the application
COPY app.jar /app.jar

CMD [ "java", "-jar", "/app.jar" ]

사용자 지정 Java 런타임 만들기

사용자 지정 Java 런타임 이미지를 만들려면 다음 예제와 유사한 다단계 Dockerfile 을 사용합니다.

# Example of custom Java runtime using jlink in a multi-stage container build
FROM mcr.microsoft.com/openjdk/jdk:21-ubuntu as runtime-build

# Create a custom Java runtime
RUN $JAVA_HOME/bin/jlink \
         --add-modules java.base \
         --strip-debug \
         --no-man-pages \
         --no-header-files \
         --compress=2 \
         --output /javaruntime

# Define your base image. You may use any base OS and version of your choice.
FROM debian:buster-slim
ENV LANG en_US.UTF-8
ENV JAVA_HOME /usr/lib/jvm/msopenjdk-21-amd64
ENV PATH "${JAVA_HOME}/bin:${PATH}"
COPY --from=runtime-build /javaruntime $JAVA_HOME

# Continue with your application deployment
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]

사용자 지정 Java 런타임을 만드는 방법에 대한 자세한 내용은 jlink를 사용하여 Java 런타임을 참조 하세요.

루트가 아닌 사용자

이미지는 필요에 따라 계층을 app 사용하여 사용하도록 설정하고 사용할 수 있는 사용자와 함께 제공됩니다.

FROM mcr.microsoft.com/openjdk/jdk:21-mariner

WORKDIR /home/app
COPY japp.jar japp.jar
USER app

CMD ["java", "-jar", "/opt/app/japp.jar"]

위의 예제에서는 이미지가 기본적으로 유지 root 되므로 root애플리케이션 이진 파일이 복사됩니다. 그러면 애플리케이션이 .로 app실행됩니다. 폴더 /home/app 는 사용자가 app소유하고 있으므로 애플리케이션에 쓰기 가능한 파일 시스템을 제공합니다.

기본 로캘

Microsoft Build of OpenJDK의 이미지는 기본적으로 로캘로 en_US.UTF-8 구성됩니다. 앞에서 설명한 대로 다른 로캘 또는 다른 기본 이미지를 사용하려면 사용자 고유의 Dockerfile에서 환경 변수를 수동으로 구성하고 원하는 로캘이 설치되어 있는지 확인해야 합니다.

예를 들어 Ubuntu 기반 이미지에서 로캘을 사용 pt_BR.UTF-8 하려면 Dockerfile에 다음 줄을 추가할 수 있습니다.

...
USER root
RUN apt-get update
RUN apt-get install -y locales

RUN sed -i '/pt_BR.UTF-8/s/^# //g' /etc/locale.gen
RUN locale-gen

ENV LANG pt_BR.UTF-8
ENV LANGUAGE pt_BR:pt
ENV LC_ALL pt_BR.UTF-8
...

이 Dockerfile은 예제로 제공됩니다. 가장 최적의 구성을 제안하기 위한 것은 아닙니다.

이전 부 버전 유지

Microsoft Build of OpenJDK 컨테이너 이미지는 이전에 나열된 태그에서만 사용할 수 있습니다. 부 버전에 대한 태그를 제공하지 않으며 주 버전 태그에는 항상 개발자가 지정된 주 버전에 대한 최신 업데이트를 갖도록 최신 부 버전이 있습니다.

이러한 기본 이미지는 Linux 배포판의 기본 패키지 관리자 메커니즘을 사용하여 JDK 패키지를 설치합니다. 따라서 특정 이전 버전을 유지하려면 특정 부 버전의 JDK와 같은 apt-get 도구를 사용하거나 yum 설치해야 합니다.

예를 들어 debian:buster-slim제공된 이미지 목록 외부의 다른 기본 OS 이미지에 있는 특정 버전으로 롤백하려면 뮬리 스테이지 컨테이너 이미지 빌드의 첫 번째 단계에서 또는 기존 Linux 패키지 설치 흐름의 일부로 아래와 동일한 방법을 사용할 수 있습니다. 자세한 내용은 Microsoft Build of OpenJDK 설치의 Ubuntu 18.04 이상 설치 섹션을 참조하세요.

CBL-Mariner RPM/yum을 기반으로 하는 기타 OS 이미지는 이 문서의 뒷부분에 제공된 세부 정보를 참조하세요.

및 기타 Debian 기반 이미지의 경우 Ubuntu명령 및 출력을 보여 주는 다음 Bash 예제와 같이 Microsoft Linux 리포지토리에 게시된 사용 가능한 모든 부 버전을 표시할 수 있습니다. 여기에 표시된 명령은 Ubuntu 18.04 이상에 설치에 설명된 대로 Microsoft Linux 리포지토리가 구성되어 있다고 가정합니다.

$ docker run --pull=always -ti --rm mcr.microsoft.com/openjdk/jdk:11-ubuntu
root@c60eacd7dd7d:/# apt-get update
...

root@c60eacd7dd7d:/# apt-cache madison msopenjdk-11
msopenjdk-11 |  11.0.23-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.22-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.21-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 | 11.0.20.1-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.20-3 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.20-2 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.20-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.19-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
msopenjdk-11 |  11.0.18-1 | https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 Packages
...

이 Bash 예제에서는 이미지를 이전 버전으로 되돌리 msopenjdk-11 는 방법을 보여 줍니다 11.0.16-1.

root@dd24eca5bdb3:/# java -version
openjdk version "11.0.23" 2024-04-16 LTS
OpenJDK Runtime Environment Microsoft-9394293 (build 11.0.23+9-LTS)
OpenJDK 64-Bit Server VM Microsoft-9394293 (build 11.0.23+9-LTS, mixed mode, sharing)

root@a93cd1ed8783:/# apt-get -y install -y --allow-downgrades msopenjdk-11=11.0.16-1
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  fonts-dejavu
The following NEW packages will be installed:
  fonts-dejavu
The following packages will be DOWNGRADED:
  msopenjdk-11
0 upgraded, 1 newly installed, 1 downgraded, 0 to remove and 0 not upgraded.
Need to get 194 MB of archives.
After this operation, 13.0 MB disk space will be freed.
Get:1 http://archive.ubuntu.com/ubuntu jammy/universe amd64 fonts-dejavu all 2.37-2build1 [3,192 B]
Get:2 https://packages.microsoft.com/ubuntu/22.04/prod jammy/main amd64 msopenjdk-11 amd64 11.0.16-1 [194 MB]
Fetched 194 MB in 18s (10.7 MB/s)
debconf: delaying package configuration, since apt-utils is not installed
Selecting previously unselected package fonts-dejavu.
(Reading database ... 9151 files and directories currently installed.)
Preparing to unpack .../fonts-dejavu_2.37-2build1_all.deb ...
Unpacking fonts-dejavu (2.37-2build1) ...
dpkg: warning: downgrading msopenjdk-11 from 11.0.23-1 to 11.0.16-1
Preparing to unpack .../msopenjdk-11_11.0.16-1_amd64.deb ...
update-alternatives: using /usr/lib/jvm/msopenjdk-11-amd64/lib/jfr to provide /usr/bin/jfr (jfr) in auto mode
Unpacking msopenjdk-11 (11.0.16-1) over (11.0.23-1) ...
Setting up fonts-dejavu (2.37-2build1) ...
Setting up msopenjdk-11 (11.0.16-1) ...

Dockerfile에서 동일한 작업을 수행하려면 다음 명령을 사용합니다.

FROM mcr.microsoft.com/openjdk/jdk:11-ubuntu
...
RUN apt-get update && \
    apt-get install -y --allow-downgrades msopenjdk-11=11.0.16-1
...

이 Bash 예제에서는 기반 이미지를 사용합니다.CBL-Mariner

root [ / ]# java -version
openjdk version "11.0.15" 2022-04-19 LTS
OpenJDK Runtime Environment Microsoft-32930 (build 11.0.15+10-LTS)
OpenJDK 64-Bit Server VM Microsoft-32930 (build 11.0.15+10-LTS, mixed mode)

root [ / ]# yum update
...

root [ / ]# yum list msopenjdk-11
Loaded plugin: tdnfrepogpgcheck
msopenjdk-11.x86_64   11.0.14+9_LTS-1    @System
msopenjdk-11.x86_64   11.0.10+9-1        packages-microsoft-com-prod
msopenjdk-11.x86_64   11.0.11+9-1        packages-microsoft-com-prod
msopenjdk-11.x86_64   11.0.12+7-1        packages-microsoft-com-prod
msopenjdk-11.x86_64   11.0.13+8_LTS-1    packages-microsoft-com-prod
msopenjdk-11.x86_64   11.0.14+9_LTS-1    packages-microsoft-com-prod

root [ / ]# yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
Loaded plugin: tdnfrepogpgcheck

Downgrading:
msopenjdk-11  x86_64  11.0.15-1  mariner-official-microsoft  308.10M  183.75M

Total installed size: 308.10M
Total download size: 183.75M
msopenjdk-11                         192678446 100%
Testing transaction
Running transaction
Installing/Updating: msopenjdk-11-11.0.15-1.x86_64
Removing: msopenjdk-11-11.0.23-1.x86_64

Dockerfile에서 동일한 작업을 수행하려면 다음 명령을 사용합니다.

FROM mcr.microsoft.com/openjdk/jdk:11-mariner
...
RUN yum update && \
    yum install -y --nogpgcheck msopenjdk-11-11.0.15-1
...

컨테이너 이미지 다시 작성 일정

최고 수준의 보안 및 안정성을 보장하기 위해 컨테이너 이미지는 매주 월요일, 수요일 및 금요일에 다시 작성됩니다. 이 정기적인 다시 빌드 일정을 사용하면 최신 보안 패치 및 업데이트를 즉시 통합할 수 있습니다.

이 다시 빌드 일정에서 다음과 같은 이점을 기대할 수 있습니다.

  • 시기 적절한 보안 업데이트: 일주일에 세 번 이미지를 다시 빌드하여 새로운 보안 취약성이 신속하게 해결되도록 합니다.
  • 안정성 향상: 정기적인 업데이트는 최신 버그 수정 및 개선 사항을 포함하여 애플리케이션의 안정성과 성능을 유지하는 데 도움이 됩니다.

이러한 업데이트와 관련된 질문이 있거나 문제가 발생하는 경우 지원 티켓을 열기 전에 이 일정을 참조하세요.

지원 정책에 대한 자세한 내용은 Microsoft OpenJDK 빌드에 대한 지원 로드맵을 참조하세요.

Windows 기반 이미지

현재 Windows 기반 컨테이너 이미지는 제공하지 않습니다.

OpenJDK의 Microsoft 빌드에 대한 피드백 제공

Microsoft OpenJDK 빌드를 개선하는 데 도움이 되는 의견, 생각 및 아이디어를 보내주세요. GitHub의 OpenJDK 토론 페이지를 방문하여 의견을 보내주세요.

Java 및 OpenJDK는 Oracle 및/또는 해당 계열사의 상표 또는 등록 상표입니다.