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
Susan Sarandonoriginal
2025-01-14 09:42:42245parcourir

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

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

Configuration du projet (les deux plates-formes)

# Create project structure
mkdir -p simple-service
cd simple-service

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"
}

Vérifier l'installation

# Verify Java
java -version

# Verify Maven
mvn -version

# Verify Docker
docker --version

Configuration du projet

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

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>

É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");
    }
}

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"]

É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

Étape 5
Créer build.sh

#!/bin/bash
mvn clean package
docker compose build
docker compose up

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

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

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!

Déclaration:
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
Article précédent:Références de méthodesArticle suivant:Références de méthodes