Kontener Docker jako narzędzie

Ciekawą ideą jest używanie kontenerów Dockera jako narzędzia. Załóżmy, że chcielibyśmy tylko „wypróbować” Mavena (nie instalując go lokalnie), możemy wykonać następującą komendę do wygenerowania szkieletu projektu:

docker run -it --rm -v ${pwd}:/usr/src/mymaven -w /usr/src/mymaven maven:latest mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"

Podzielmy to na części:

docker run -it --rm -v ${pwd}:/usr/src/mymaven -w /usr/src/mymaven maven:latest

to jest składnia Dockera pozwalająca na uruchomienie obrazu maven, w trybie interaktywnym (-it), z automatycznym usunięciem kontenera po wyłączeniu (–rm), z użyciem bind mounts (-v w połączeniu z -w).

mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"

a to jest składnia Mavena generująca szkielet projektu.

Możliwe uproszczenie przy użyciu Dockerfile i Docker Compose

Wydaje się to dosyć skomplikowane, ale można to trochę uprościć wykorzystując do tego Dockerfile:

FROM maven

WORKDIR /java-project

ENTRYPOINT [ "mvn" ]

oraz Docker Compose:

version: '3.8'
services:
  mvn:
    build: .\
    volumes:
      - ./:/java-project
    stdin_open: true
    tty: true

dzięki czemu możemy teraz korzystać z następującej komendy:

docker compose run mvn archetype:generate "-DgroupId=com.example" "-DartifactId=myproject" "-DarchetypeArtifactId=maven-archetype-quickstart" "-DinteractiveMode=false"

Warto zajrzeć

1. CMD vs ENTRYPOINT
2. Docker Compose run

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *