목차
Requirements
제작 과정은 프로젝트 구성 과정에 통합되어야 합니다
공식 이미지를 기본 이미지로 사용하세요
设定正确的时区
Container内的程序以非root用户启动
指定Web程序的接口
能够传递JVM参数、Java System Properties、程序自定义的参数
样例项目
目录结构
构建Image的方法
运行
Java java지도 시간 Java 프로그램을 이용하여 Docker 이미지를 만드는 방법 및 과정

Java 프로그램을 이용하여 Docker 이미지를 만드는 방법 및 과정

Sep 19, 2018 pm 03:35 PM
docker java maven

이 글의 내용은 Java 프로그램을 사용하여 Docker 이미지를 만드는 방법과 프로세스에 대한 것입니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되길 바랍니다.

Requirements

다음은 Docker 이미지 제작에 대한 몇 가지 요구 사항이며, 이를 수행하는 방법을 살펴보겠습니다.

  1. 생산 과정은 프로젝트 구성 과정에 통합되어야 합니다

  2. 공식 이미지를 기본 이미지로 사용

  3. 올바른 시간대를 설정하세요

  4. 컨테이너 안의 프로그램이 비로 시작됩니다 -root user

  5. 웹 프로그램의 인터페이스

  6. 를 지정하여 JVM 매개변수, Java 시스템 속성 및 프로그램 정의 매개변수를 전달할 수 있습니다.

위의 사항을 달성하는 방법에 대해 자세히 이야기해 보겠습니다.

제작 과정은 프로젝트 구성 과정에 통합되어야 합니다

Spotify의 dockerfile-maven-plugin은 사용하기 가장 간단하고 마스터하기 쉽기 때문에 사용을 권장합니다.

이 플러그인의 핵심은 Dockerfile을 작성한다는 것입니다(Dockerfile의 구체적인 작성 방법은 공식 문서를 참조하세요). 이 플러그인은 Docker 이미지를 구축하는 데 도움이 되는 몇 가지 매개변수를 전달합니다.

Dockerfile을 작성할 수 있는 한 이 플러그인은 추가 개념을 추가하지 않습니다.

공식 이미지를 기본 이미지로 사용하세요

Java의 기본 이미지는 오래된 Java 저장소가 아닌 openjdk 저장소에서 찾아야 합니다.

openjdk 저장소는 눈부시게 보이는 다양한 이미지 태그를 제공하지만 기본적으로는 몇 가지만 있습니다.

  • openjdk:<version>

  • openjdk:<version>-slim

  • openjdk: <version>-alpine

<version> 정보 일반적으로 더 큰 버전 번호를 지정하면 됩니다. 예를 들어 Dockerfile에 다음과 같이 작성할 수 있습니다. <version>一般来说指定大版本号就行了,比如你可以在Dockerfile这样写:

FROM openjdk:8-alpine
로그인 후 복사

从尺寸上来讲,alpine最小、slim稍大、默认的最大。所以应该尽可能的使用alpine版本的,如果发现程序的运行环境缺少某些东西,那么尝试用slim版本或者默认版本。就目前的经验来讲:

  • 如果需要操作系统字体库,那么就得使用slim版本或者默认版本。需要操作系统字体库的程序例如:图片验证码、PDF导出。

  • 如果需要某些Linux标准的动态/静态连接库,那么在alpine版本不行的情况下,尝试slim版本或默认版本。因为alpine版本是一个及其精简的Linux,它删除了很多东西。

设定正确的时区

几乎所有的Docker Image的时区都是UTC,我们需要给我们自己制作的Docker Image设定时区:

ENV TZ=Asia/Shanghai
RUN set -eux; \
    ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
    echo $TZ > /etc/timezone
로그인 후 복사

Container内的程序以非root用户启动

在Docker Image内部,我们应该使用非root用户启动程序,这需要使用到gosu。

gosu的Dockerfile指南在这里。

记得要根据不同的基础Image选择适合的安装方式。

指定Web程序的接口

对于联网应用而言,必须在Dockerfile中指定暴露的端口,否则该端口无法映射。

EXPOSE 8080
로그인 후 복사

能够传递JVM参数、Java System Properties、程序自定义的参数

我们需要能够在启动Docker Image的时候将一些参数传递进去:

  • JVM参数

  • Java System Properties

  • 程序启动参数

这里就需要参考Dockerfile best practice和Docker ENTRYPOINT了。

样例项目

样例项目源代码在这里:https://github.com/chanjarster/dockerfile-examples/

目录结构

所有与程序相关的东西都存放在/home/java-app/下:

/home/java-app
   ├── docker-entrypoint.sh
   ├── lib
   │   └── java-app.jar
   ├── etc
   ├── logs
   └── tmp
로그인 후 복사

docker-entrypoint.sh,启动脚本

lib,存放JAR包

lib/java-app.jar,程序JAR包

etc,存放配置文件

logs,存放日志文件

tmp,存放临时文件

构建Image的方法

mvn clean package dockerfile:build
로그인 후 복사

运行

普通启动,然后访问http://localhost:8080

docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
로그인 후 복사

设定JVM参数,使用JVM_OPTS环境变量:

docker run -p 8080:8080 -e JVM_OPTS='-Xmx128M -Xms128M' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
로그인 후 복사

设定System Properties,使用JAVA_ARGS

docker run -p 8080:8080 -e JAVA_ARGS='-Dabc=xyz -Ddef=uvw' chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT
로그인 후 복사
크기 측면에서 즉, 알파인이 가장 작고, 슬림이 약간 크며, 기본값이 가장 큽니다. 따라서 최대한 알파인 버전을 사용하셔야 하며, 프로그램 실행 환경에 뭔가 부족한 점이 있다면 슬림 버전이나 기본 버전을 사용해 보시기 바랍니다. 현재 경험에 따르면

🎜🎜운영 체제 글꼴 라이브러리가 필요한 경우 슬림 버전이나 기본 버전을 사용해야 합니다. 이미지 인증 코드, PDF 내보내기 등 운영체제 글꼴 라이브러리가 필요한 프로그램. 🎜🎜🎜🎜Linux 표준 동적/정적 링크 라이브러리가 필요한 경우 알파인 버전이 작동하지 않으면 슬림 버전이나 기본 버전을 사용해 보세요. 알파인 버전은 매우 간소화된 Linux이기 때문에 많은 것을 삭제합니다. 🎜🎜🎜🎜올바른 시간대 설정🎜🎜거의 모든 Docker 이미지 시간대는 UTC입니다. 우리가 만든 Docker 이미지의 시간대를 설정해야 합니다. 🎜
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT --debug
로그인 후 복사
🎜컨테이너의 프로그램은 루트가 아닌 사용자로 시작됩니다. 🎜🎜Docker 이미지 내에서 루트가 아닌 사용자를 사용하여 프로그램을 시작해야 하며, 이를 위해서는 gosu를 사용해야 합니다. 🎜🎜gosu의 Dockerfile 가이드는 여기 있습니다. 🎜🎜다양한 기본 이미지에 따라 적절한 설치 방법을 선택하는 것을 잊지 마세요. 🎜🎜웹 프로그램의 인터페이스를 지정하세요🎜🎜네트워크로 연결된 애플리케이션의 경우 노출된 포트를 Dockerfile에 지정해야 합니다. 그렇지 않으면 포트를 매핑할 수 없습니다. 🎜rrreee🎜JVM 매개변수, Java 시스템 속성 및 프로그램 정의 매개변수를 전달할 수 있어야 합니다.🎜🎜Docker 이미지를 시작할 때 일부 매개변수를 전달할 수 있어야 합니다. 🎜🎜🎜🎜JVM 매개변수🎜🎜🎜🎜Java 시스템 속성🎜 🎜🎜 🎜프로그램 시작 매개변수🎜🎜🎜🎜여기에서 Dockerfile 모범 사례와 Docker ENTRYPOINT를 참조해야 합니다. 🎜🎜샘플 프로젝트🎜🎜샘플 ​​프로젝트 소스코드는 https://github.com/chanjarster/dockerfile-examples/🎜🎜디렉토리 구조🎜🎜프로그램과 관련된 모든 내용은 /home/에 저장됩니다. -app/: 🎜rrreee🎜docker-entrypoint.sh, 시작 스크립트 🎜🎜lib, JAR 패키지 저장 🎜🎜lib/java-app.jar, 프로그램 JAR 패키지 🎜🎜etc, 구성 파일 🎜🎜 로그 저장, 로그 파일 저장🎜🎜tmp, 임시 파일 저장🎜🎜이미지 빌드 방법🎜rrreee🎜Run🎜🎜정상적인 시작 후 http://localhost:8080 방문:🎜rrreee🎜JVM 매개변수 설정, 사용 JVM_OPTS 환경 변수: 🎜rrreee🎜시스템 속성 설정, JAVA_ARGS 환경 변수 사용: 🎜rrreee🎜 프로그램 실행 매개변수 제공, 나중에 직접 추가하기: 🎜 rrreee

위 내용은 Java 프로그램을 이용하여 Docker 이미지를 만드는 방법 및 과정의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

자바의 완전수 자바의 완전수 Aug 30, 2024 pm 04:28 PM

Java의 완전수 가이드. 여기서는 정의, Java에서 완전 숫자를 확인하는 방법, 코드 구현 예제에 대해 논의합니다.

자바의 웨카 자바의 웨카 Aug 30, 2024 pm 04:28 PM

Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 스미스 번호 Java의 스미스 번호 Aug 30, 2024 pm 04:28 PM

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

PI 노드 교육 : PI 노드 란 무엇입니까? Pi 노드를 설치하고 설정하는 방법은 무엇입니까? PI 노드 교육 : PI 노드 란 무엇입니까? Pi 노드를 설치하고 설정하는 방법은 무엇입니까? Mar 05, 2025 pm 05:57 PM

Pinetwork 노드에 대한 자세한 설명 및 설치 안내서이 기사에서는 Pinetwork Ecosystem을 자세히 소개합니다. Pi 노드, Pinetwork 생태계의 주요 역할을 수행하고 설치 및 구성을위한 전체 단계를 제공합니다. Pinetwork 블록 체인 테스트 네트워크가 출시 된 후, PI 노드는 다가오는 주요 네트워크 릴리스를 준비하여 테스트에 적극적으로 참여하는 많은 개척자들의 중요한 부분이되었습니다. 아직 Pinetwork를 모른다면 Picoin이 무엇인지 참조하십시오. 리스팅 가격은 얼마입니까? PI 사용, 광업 및 보안 분석. Pinetwork 란 무엇입니까? Pinetwork 프로젝트는 2019 년에 시작되었으며 독점적 인 Cryptocurrency Pi Coin을 소유하고 있습니다. 이 프로젝트는 모든 사람이 참여할 수있는 사람을 만드는 것을 목표로합니다.

DeepSeek을 설치하는 방법 DeepSeek을 설치하는 방법 Feb 19, 2025 pm 05:48 PM

Docker 컨테이너를 사용하여 사전 컴파일 된 패키지 (Windows 사용자의 경우)를 사용하여 소스 (숙련 된 개발자)를 컴파일하는 것을 포함하여 DeepSeek를 설치하는 방법에는 여러 가지가 있습니다. 공식 문서는 신중하게 문서를 작성하고 불필요한 문제를 피하기 위해 완전히 준비합니다.

Java Spring 인터뷰 질문 Java Spring 인터뷰 질문 Aug 30, 2024 pm 04:29 PM

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Java 8 Stream foreach에서 나누거나 돌아 오시겠습니까? Feb 07, 2025 pm 12:09 PM

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java Made Simple: 초보자를 위한 프로그래밍 능력 가이드 Java Made Simple: 초보자를 위한 프로그래밍 능력 가이드 Oct 11, 2024 pm 06:30 PM

간단해진 Java: 강력한 프로그래밍을 위한 초보자 가이드 소개 Java는 모바일 애플리케이션에서 엔터프라이즈 수준 시스템에 이르기까지 모든 분야에서 사용되는 강력한 프로그래밍 언어입니다. 초보자의 경우 Java의 구문은 간단하고 이해하기 쉬우므로 프로그래밍 학습에 이상적인 선택입니다. 기본 구문 Java는 클래스 기반 객체 지향 프로그래밍 패러다임을 사용합니다. 클래스는 관련 데이터와 동작을 함께 구성하는 템플릿입니다. 다음은 간단한 Java 클래스 예입니다. publicclassPerson{privateStringname;privateintage;

See all articles