Java 프로그램을 이용하여 Docker 이미지를 만드는 방법 및 과정
이 글의 내용은 Java 프로그램을 사용하여 Docker 이미지를 만드는 방법과 프로세스에 대한 것입니다. 이는 특정 참조 가치가 있으므로 도움이 필요한 친구에게 도움이 되길 바랍니다.
Requirements
다음은 Docker 이미지 제작에 대한 몇 가지 요구 사항이며, 이를 수행하는 방법을 살펴보겠습니다.
생산 과정은 프로젝트 구성 과정에 통합되어야 합니다
공식 이미지를 기본 이미지로 사용
올바른 시간대를 설정하세요
컨테이너 안의 프로그램이 비로 시작됩니다 -root user
웹 프로그램의 인터페이스
를 지정하여 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
docker run -p 8080:8080 chanjarster/dockerfile-java-examples-1:1.0-SNAPSHOT --debug
/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











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

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

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

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

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

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

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