Maison > Java > javaDidacticiel > Créer et déployer votre première application Java avec Docker en quelques minutes seulement

Créer et déployer votre première application Java avec Docker en quelques minutes seulement

Susan Sarandon
Libérer: 2025-01-14 09:42:42
original
206 Les gens l'ont consulté

Building and Deploying Your First Java App with Docker in Just inutes

Créons une application Java simple qui renvoie du texte et disponible sur le port 1800 de votre environnement local à l'aide du conteneur Docker en 5 minutes (dépend de la vitesse de votre connexion Internet).

Vous pouvez toujours récupérer le code source complet dans mon référentiel public :
https://github.com/alexander-uspenskiy/simple-service

Configuration des dépendances

Étape 1 : prérequis

  1. Installer Java 8
  2. Installer Maven
  3. Installer Docker
  4. Installer les extensions de code VS

Installation sur Mac

# Install Homebrew if not present
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Java 8
brew tap homebrew/cask-versions
brew install --cask temurin8

# Install Maven
brew install maven

# Install Docker Desktop
brew install --cask docker

# Install VS Code
brew install --cask visual-studio-code

# Install VS Code Extensions
code --install-extension vscjava.vscode-java-pack
code --install-extension ms-azuretools.vscode-docker
Copier après la connexion
Copier après la connexion

Installation de Windows

# Install Chocolatey if not present
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Install Java 8
choco install temurin8

# Install Maven
choco install maven

# Install Docker Desktop
choco install docker-desktop

# Install VS Code
choco install vscode

# Install VS Code Extensions
code --install-extension vscjava.vscode-java-pack
code --install-extension ms-azuretools.vscode-docker
Copier après la connexion
Copier après la connexion

Configuration du projet (les deux plates-formes)

# Create project structure
mkdir -p simple-service
cd simple-service
Copier après la connexion

Paramètres du code VS

{
    "java.configuration.runtimes": [
        {
            "name": "JavaSE-1.8",
            "path": "/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home",
            "default": true
        }
    ],
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.compile.nullAnalysis.mode": "automatic",
    "maven.executable.path": "/usr/local/bin/mvn"
}
Copier après la connexion

Vérifier l'installation

# Verify Java
java -version

# Verify Maven
mvn -version

# Verify Docker
docker --version
Copier après la connexion

Configuration du projet

# Create Maven project
mvn archetype:generate \
  -DgroupId=com.example \
  -DartifactId=simple-service \
  -DarchetypeArtifactId=maven-archetype-quickstart \
  -DarchetypeVersion=1.4 \
  -DinteractiveMode=false
Copier après la connexion

Création de l'application de test

Après la dernière étape, vous devriez avoir un répertoire de services simples avec la structure pré-construite.

Étape 1

  1. Mettre à jour le fichier pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>simple-service</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>simple-service</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.httpcomponents.client5</groupId>
        <artifactId>httpclient5</artifactId>
        <version>5.4</version>
    </dependency>
</dependencies>
<properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>com.example.App</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
Copier après la connexion

Étape 2

Ajouter une logique à App.java

package com.example;

import com.sun.net.httpserver.HttpServer;
import java.net.InetSocketAddress;
import java.io.IOException;
import java.io.OutputStream;

public class App {
    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(1800), 0);
        server.createContext("/", (exchange -> {
            String response = "Hello from Java!";
            exchange.sendResponseHeaders(200, response.length());
            try (OutputStream os = exchange.getResponseBody()) {
                os.write(response.getBytes());
            }
        }));
        server.setExecutor(null);
        server.start();
        System.out.println("Server started on port 1800");
    }
}
Copier après la connexion

Explications rapides :

  1. Importations et configuration

    • Utilise le package com.sun.net.httpserver intégré
    • Crée un serveur HTTP simple sans dépendances externes
    • Fonctionne sur le port 1800
  2. Configuration du serveur

HttpServer.create()

  • Crée une nouvelle instance de serveur

InetSocketAddress(1800)

  • Se lie au port 1800
  • 0 - Valeur du backlog par défaut pour la file d'attente de connexion
  1. Traitement des demandes

createContext("/")

  • Gère toutes les requêtes vers le chemin racine "/"
  • L'expression Lambda définit le gestionnaire de requêtes
  • Renvoie « Bonjour de Java ! » pour toutes demandes
  1. Flux de réponse

    • Définit le code de réponse 200 (OK)
    • Définit la longueur du contenu
    • Écrit les octets de réponse dans le flux de sortie
    • Flux de fermeture automatique avec essai avec ressources
  2. Démarrage du serveur

setExecutor(null)

  • Utilise l'exécuteur par défaut

server.start()

  • Comme à écouter les demandes
  • Imprime le message de confirmation

Étape 3

Créez Dockerfile à la racine du projet :

FROM amazoncorretto:8
WORKDIR /app
COPY target/simple-service-1.0-SNAPSHOT.jar app.jar
EXPOSE 1800
CMD ["java", "-jar", "app.jar"]
Copier après la connexion

Étape 4
Créez docker-compose.yml pour créer et mapper le conteneur sur le port 1800

services:
  app:
    build: .
    ports:
      - "1800:1800"
    restart: unless-stopped
Copier après la connexion

Étape 5
Créer build.sh

#!/bin/bash
mvn clean package
docker compose build
docker compose up
Copier après la connexion

Et autorisez l'autorisation d'exécution pour ce fichier dans le terminal :

# Install Homebrew if not present
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Java 8
brew tap homebrew/cask-versions
brew install --cask temurin8

# Install Maven
brew install maven

# Install Docker Desktop
brew install --cask docker

# Install VS Code
brew install --cask visual-studio-code

# Install VS Code Extensions
code --install-extension vscjava.vscode-java-pack
code --install-extension ms-azuretools.vscode-docker
Copier après la connexion
Copier après la connexion

Créer et exécuter l'application

Courez simplement

# Install Chocolatey if not present
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

# Install Java 8
choco install temurin8

# Install Maven
choco install maven

# Install Docker Desktop
choco install docker-desktop

# Install VS Code
choco install vscode

# Install VS Code Extensions
code --install-extension vscjava.vscode-java-pack
code --install-extension ms-azuretools.vscode-docker
Copier après la connexion
Copier après la connexion

Vous devriez avoir le projet construit, l'image créée et le conteneur exécuté.

Pour tester l'application ouvrez simplement le navigateur à l'adresse http://localhost:1800/

Bon codage !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal