Wstęp
Zawarte w tym artykule informacje bazują na poprzednich wpisach:
- https://itadmin.vblog.ovh/docker-instalacja-i-konfiguracja-na-systemie-debian-11/
- https://itadmin.vblog.ovh/docker-aktualizacja-aplikacji-kontenerowych/
- https://itadmin.vblog.ovh/proxmox-instalacja-i-konfiguracja-mariadb-na-ubuntu-22-04/
- https://itadmin.vblog.ovh/przyklad-aplikacji-java-zapisujacej-do-bazy-danych-mariadb/
- https://itadmin.vblog.ovh/przyklad-aplikacji-java-odczytujacej-z-bazy-danych-mariadb/
Zbudowanie lokalnego obrazu docker
W katalogu np. /home/dockeruser/java/javawritemariadbexample/ gdzie mamy wszystkie potrzebne do działania aplikacji pliki tworzymy plik Dockerfile o zawartości
FROM openjdk:11 COPY JavaWriteMariadbExampleApp.jar /opt COPY mariadb-java-client-3.1.2.jar /opt ENV TZ="Europe/Warsaw" ENV JAVA_OPTS="" ENV APP_OPTIONS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /opt/JavaWriteMariadbExampleApp.jar $APP_OPTIONS" ]
i budujemy lokalnie nasz obraz Dockera aplikacji w Java na podstawie obrazu Dockera openjdk:11 pobranego z hub.docker.com
# obraz będzie się nazywał java-write-mariadb-img i miał umowną wersję 1.0 docker build -t java-write-mariadb-img:1.0 .
Sprawdzamy czy obraz jest w lokalnym repozytorium obrazów Docker.
docker images REPOSITORY TAG IMAGE ID CREATED SIZE java-write-mariadb-img 1.0 85581b4b540b 45 seconds ago 655MB
Uruchomienie kontenera z aplikacją na podstawie lokalnego obrazu Docker
Uruchamiamy nowy kontener java-write-mariadb-app na podstawie lokalnego obrazu dockera java-write-mariadb-img:1.0 podając w z linii komend zmienne środowiskowe. Jeśli ich nie podamy kontener po prostu się zatrzyma po starcie gdyż nie będzie miał zmiennych potrzebnych do połączenia z serwerem bazy danych MariaDB.
docker run -d --name java-write-mariadb-app \ -e CF_MARIADB_SERVER=192.168.30.40 \ -e CF_MARIADB_DATABASE=docker_dba \ -e CF_MARIADB_USER=docker_usr \ -e CF_MARIADB_PASS=Hdbryu3te72, \ -e CF_INSERT_INTERVAL=15 \ java-write-mariadb-img:1.0
Sprawdzamy czy kontener jest uruchomiony
docker ps | grep java-write-mariadb-app 6e1b317ff194 java-write-mariadb-img:1.0 "sh -c 'java $JAVA_O…" 4 minutes ago Up 4 minute java-write-mariadb-app
oraz jak działa aplikacja Java w jego wnętrzu. Jak widać wszystko jest w porządku i nasza aplikacja wstawia co 15 sekund (zmienna CF_INSERT_INTERVAL) nowy rekord do bazy danych MariaDB.
docker logs -f java-write-mariadb-app -------------------- 26 ------------------------- Current datetime:2023-06-29 17:23:21 description:Java jest najczęściej używana w backendowych systemach aplikacji internetowych rand_number:88368 operation_status:0 A new row has been inserted successfully.
Usunięcie kontenera aplikacji i obrazu Docker aplikacji z systemu
# zatrzymujemy i usuwmamy kontener docker stop java-write-mariadb-app docker rm java-write-mariadb-app # sprawdzamy id obrazu np. 85581b4b540b docker images REPOSITORY TAG IMAGE ID CREATED SIZE java-write-mariadb-img 1.0 85581b4b540b 12 minutes ago 655MB # usuwamy obraz na podstawie id np. 85581b4b540b docker image rm 85581b4b540b Untagged: java-write-mariadb-img:1.0 Deleted: sha256:85581b4b540bfd5810a0e6ce249089089c00db4a245c53e3ca584d257f4f666f
Wysłanie obrazu Docker do repozytorium hub.docker.com
Dodanie tagu do naszego obrazu
# sprawdzamy image id naszego lokalnego obrazu docker images REPOSITORY TAG IMAGE ID CREATED SIZE java-write-mariadb-img 1.0 85581b4b540b 18 minutes ago 655MB # dodajemy nowy tag do obrazu 85581b4b540b o nazwie zibidockers/java-write-mariadb:1.0 # gdzie zibidockers to nazwa użytkownika hub.dockers.com a java-write-mariadb:1.0 to nazwa i umowna wersja docker tag 85581b4b540b zibidockers/java-write-mariadb:1.0 # w naszym repozytorium pojawi się nowy obraz, który za chwilę wyślemy do hub.docker.com docker images REPOSITORY TAG IMAGE ID CREATED SIZE java-write-mariadb-img 1.0 85581b4b540b 23 minutes ago 655MB zibidockers/java-write-mariadb 1.0 85581b4b540b 23 minutes ago 655MB
Logowanie do hub.docker.com
Wcześniej należy założyć konto na stronie Docker Hub Container Image Library | App Containerization
docker login -u zibidockers -p xxxxxxxxxx # sprawdzamy ile zostało nam limitu dziennego na wysyłanie / pobranie obrazów Docker TOKEN=$(curl --user 'zibidockers:xxxxxxxxxx' "https://auth.docker.io/token?service=registry.docker.io&scope=repository:ratelimitpreview/test:pull" | jq -r .token) curl --head -H "Authorization: Bearer $TOKEN" https://registry-1.docker.io/v2/ratelimitpreview/test/manifests/latest HTTP/1.1 200 OK content-length: 2782 content-type: application/vnd.docker.distribution.manifest.v1+prettyjws docker-content-digest: sha256:767a3811223231242142121323233229e0e2020 docker-distribution-api-version: registry/2.0 etag: "sha256:767a387a3811223231242142121323233229e0e20e2020" date: Thu, 29 Jun 2023 15:29:34 GMT strict-transport-security: max-age=31536000 ratelimit-limit: 200;w=21600 ratelimit-remaining: 199;w=21600 docker-ratelimit-source: 5qwqw3-caaa-4wq8-9sas7b-8a96sdsae1cc # jak widać ratelimit-remaining wynosi obecnie 199 z 200
Wysłanie naszego obrazu Docker do hub.docker.com
docker push zibidockers/java-write-mariadb:1.0 The push refers to repository [docker.io/zibidockers/java-write-mariadb] ff99664ff98c: Pushed 313a60cf3e49: Pushed 7b7f3078e1db: Mounted from library/openjdk 826c3ddbb29c: Mounted from library/openjdk b626401ef603: Mounted from library/openjdk 9b55156abf26: Mounted from library/openjdk 293d5db30c9f: Mounted from library/openjdk 03127cdb479b: Mounted from library/openjdk 9c742cd6c7a5: Mounted from library/openjdk 1.0: digest: sha256:8bf7c22922a0dasdasdasdsdsawewewqe67fd16c5e03a size: 2213
Weryfikacja poprawności wysłanego do hub.docker.com obrazu Docker
Logujemy się na stronie https://hub.docker.com/ i sprawdzamy czy powstało nowe repozytorium.

Weryfikacja z wiersza poleceń.
# po zalogowaniu do hub.docker.com z konsoli docker search zibidockers NAME DESCRIPTION STARS OFFICIAL AUTOMATED zibidockers/mymariadb 0 zibidockers/node-panjabu test node-panjabu 0 zibidockers/java-write-mariadb 0
Archiwizowanie i odtwarzanie lokalnego obrazu Docker
# zapis lokalnego obrazu zibidockers/java-write-mariadb:1.0 do pliku archiwum java-write-mariadb_1.0.tar docker save zibidockers/java-write-mariadb:1.0 > java-write-mariadb_1.0.tar # po usunięciu lokalnego obrazu zibidockers/java-write-mariadb:1.0 # można go łatwo przywrócić bez ponownego ściągania z hub.docker.com docker load --input java-write-mariadb_1.0.tar
Uruchomienie kontenera z aplikacją na podstawie obrazu z hub.docker.com
docker run -d --name java-write-mariadb-app \ -e CF_MARIADB_SERVER=192.168.30.40 \ -e CF_MARIADB_DATABASE=docker_dba \ -e CF_MARIADB_USER=docker_usr \ -e CF_MARIADB_PASS=Hdbryu3te72, \ -e CF_INSERT_INTERVAL=15 \ zibidockers/java-write-mariadb:1.0

Strona z obrazem Docker https://hub.docker.com/repository/docker/zibidockers/java-write-mariadb/general

