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

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

不言
不言원래의
2018-09-19 15:35:332103검색

이 글의 내용은 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으로 문의하세요.