Free Lines Arrow
본문 바로가기
Development/Docker

[Docker] gradle을 이용한 이미지 생성 및 푸시

by p8labs 2025. 2. 13.
728x90
반응형

gradle 을 이용하여 이미지를 생성하고 푸시한다.

 

 

라이브러리

    // Docker
    // https://mvnrepository.com/artifact/com.bmuschko.docker-remote-api/com.bmuschko.docker-remote-api.gradle.plugin
    implementation 'com.bmuschko.docker-remote-api:com.bmuschko.docker-remote-api.gradle.plugin:9.4.0'
// https://mvnrepository.com/artifact/com.bmuschko.docker-java-application/com.bmuschko.docker-java-application.gradle.plugin
    implementation 'com.bmuschko.docker-java-application:com.bmuschko.docker-java-application.gradle.plugin:9.4.0'

 

 

 

gradle 코드

  • 도커는 동일한 패스에 있는 파일만 COPY 가 가능 하기때문에
  • 생성된 jar 파일을 도커 파일이 있는 곳으로 옮겨 줘야 한다.
  • 아래 보면 password가 노출이 되는데 해당부분은 삭제하거나 jenkins 를 통해서 외부에서 입력을 받도록 해야 한다.
  • 아래 username, password 는 도커 허브의 아이디와 비번을 입력하면 된다.
plugins {
	id 'java'
	id 'org.springframework.boot' version '3.4.2'
	id 'io.spring.dependency-management' version '1.1.7'
	id 'com.bmuschko.docker-remote-api' version '9.4.0'
	id 'com.bmuschko.docker-java-application' version '9.4.0'
}

group = 'com.p8labs'
version = '0.0.1'

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

repositories {
	mavenCentral()
}

ext {
	set('springCloudVersion', "2024.0.0")
}

// 실행 가능한 JAR 생성 설정
bootJar {
	enabled = true

	doLast {
		copy {
			def jarFile = tasks.bootJar.archiveFile.get().asFile
			def jarFilePath = jarFile.path

			from jarFilePath
			into getRootDir().path + "/build/docker/"
		}
	}
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-actuator'
	implementation 'org.springframework.cloud:spring-cloud-config-server'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
    
 // Docker
 // https://mvnrepository.com/artifact/com.bmuschko.docker-remote-api/com.bmuschko.docker-remote-api.gradle.plugin
    implementation 'com.bmuschko.docker-remote-api:com.bmuschko.docker-remote-api.gradle.plugin:9.4.0'
// https://mvnrepository.com/artifact/com.bmuschko.docker-java-application/com.bmuschko.docker-java-application.gradle.plugin
    implementation 'com.bmuschko.docker-java-application:com.bmuschko.docker-java-application.gradle.plugin:9.4.0'

}

dependencyManagement {
	imports {
		mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
	}
}

tasks.named('test') {
	useJUnitPlatform()
}



apply from: 'gradle/docker.gradle'


import com.bmuschko.gradle.docker.tasks.image.*

tasks.create('createDockerfile', Dockerfile) {
	def jarFile = tasks.bootJar.archiveFile.get().asFile
	from('openjdk:17-jdk-slim')
	arg("JAR_FILE")
	copyFile(jarFile.getName(), '/config-app.jar')
	runCommand("mkdir -p target/dependency && (cd target/dependency; jar -xf /config-app.jar)")
	entryPoint("java", "-jar", "/config-app.jar")
	exposePort(8071)
}

task buildImage(type: DockerBuildImage) {
	dependsOn createDockerfile
	images.add('rnrl1215/p8labs-config:0.0.1')
}

task pushDocker(type: DockerPushImage) {
	dependsOn buildImage  // Docker 이미지 빌드 후 푸시
	images.add("rnrl1215/p8labs-config:0.0.1")
	registryCredentials {
		username = ''
		password = ''
	}
}

 

 

 

 

도커 허브에 올라간 화면

 

 

 

728x90
반응형

'Development > Docker' 카테고리의 다른 글

[Docker] ClickHouse DB 연동  (0) 2022.04.03
[Docker] Docker 설치하기  (0) 2021.07.22
[Docker] Docker 의 개념  (0) 2021.07.21

댓글