[JAVA] 2. Créez une image Docker et enregistrez le registre

introduction

Cet article est la suite de 1 ci-dessous.

  1. Exécuter rapidement le module Web Java avec Google Kubernetes Engine (GKE)
  2. Créer une image Docker et enregistrer le registre
  3. Créer une base de données accessible à partir du module Web
  4. Créez le manifeste et exécutez le module Web (https://qiita.com/Turtle-child-No2/items/23982059d188e44618df)

2-1. Création d'un fichier docker

Étape 2-1.1

GKE acquiert l'image Docker enregistrée dans Container Registry et l'exécute sur le nœud créé en 1 (article précédent) (le module Web s'exécute). Dans cet article, nous allons créer une image Docker qui étend le module Web obtenu de Github à tomcat. L'image Docker est construite sur la base du fichier docker. Créons maintenant un fichier docker et construisons une image docker.

Connectez-vous d'abord au cluster Kubernetes. 014.png

Étape 2-1.2

L'écran de détails s'affiche. Cliquez sur le carré en haut à droite pour copier la commande dans le presse-papiers. Cliquez ensuite sur Exécuter dans Cloud Shell. 015.png

Étape 2-1.3

L'écran suivant peut apparaître lorsqu'il est exécuté pour la première fois. Dans ce cas, cliquez sur "Démarrer CLOUD SHELL". 016.png Google Cloud Shell est un outil qui fournit un accès en ligne de commande aux ressources informatiques hébergées sur Google Cloud Platform. Il sera interrompu si vous fermez la session Cloud Shell ou ne faites rien pendant plus d'une heure, mais comme le répertoire de base est persistant, le travail restera la prochaine fois que vous lancerez Cloud Shell.

Étape 2-1.4

Lorsque l'écran ci-dessous s'affiche, appuyez une fois sur la touche "Entrée" pour exécuter la commande qui a déjà été saisie (la commande pour acquérir les informations d'authentification nécessaires pour interagir avec le cluster Kubernetes). 017.png

La commande sera exécutée et l'état sera le suivant.

Welcome to Cloud Shell! Type "help" to get started.
Your Cloud Platform project in this session is set to [project_id].
Use “gcloud config set project [project_id]” to change to a different project.
[userid]@cloudshell:~ ([projectid])$ gcloud beta container clusters get-credentials standard-cluster-1 --region us-central1 --project [project_id]
Fetching cluster endpoint and auth data.
kubeconfig entry generated for standard-cluster-1.
[userid]@cloudshell:~ ([project_id])$

Étape 2-1.5

Ensuite, démarrez vi et créez un fichier docker avec le contenu suivant.

[userid]@cloudshell:~ ([project_id])$ vi dockerfile
FROM centos:7
EXPOSE 8080
RUN yum install -y git
RUN yum install -y install unzip
WORKDIR /work
RUN git clone https://github.com/Turtle-child-No2/k8s.git
ADD openjdk-11.0.2_linux-x64_bin.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk-11.0.2
ENV PATH=$PATH:$JAVA_HOME/bin
ADD gradle-5.2.1-bin.tar.gz /usr/local
ENV GRADLE_HOME=/usr/local/gradle-5.2.1
ENV PATH=$GRADLE_HOME/bin:$PATH
RUN mv -T ./k8s/ ./sample-app/
WORKDIR ./sample-app
RUN gradle build --stacktrace
ADD apache-tomcat-9.0.17.tar.gz /opt/
RUN rm -Rf /opt/apache-tomcat-9.0.17/webapps/ROOT/
RUN rm -Rf /opt/apache-tomcat-9.0.17/webapps/docs/
RUN rm -Rf /opt/apache-tomcat-9.0.17/webapps/examples/
RUN rm -Rf /opt/apache-tomcat-9.0.17/webapps/host-manager/
RUN rm -Rf /opt/apache-tomcat-9.0.17/webapps/manager/
RUN mkdir -m 750 /opt/apache-tomcat-9.0.17/webapps/sample-app
RUN unzip -d /opt/apache-tomcat-9.0.17/webapps/sample-app/ /work/sample-app/build/libs/sample-app.war
RUN find /opt/apache-tomcat-9.0.17/webapps/sample-app/ -type d -exec chmod 750 \{\} \;
RUN find /opt/apache-tomcat-9.0.17/webapps/sample-app/ -type f -exec chmod 640 \{\} \;
CMD ["/opt/apache-tomcat-9.0.17/bin/catalina.sh", "run"]

Pour expliquer brièvement le contenu du dockerfile, d'abord, centos7 est spécifié comme image de base. Ensuite, installez le numéro de port à écouter lorsque le conteneur démarre, et les packages nécessaires pour obtenir et compiler la source java. Ensuite, récupérez le source java de github et compilez-le avec gradle. Enfin, décompressez tomcat, supprimez les fichiers inutiles, modifiez les autorisations de dossier, démarrez tomcat et vous avez terminé.

Étape 2-1.6

Ensuite, préparez les trois fichiers suivants requis pour créer l'image Docker.

Étape 2-1.7

Téléchargez openjdk-11.0.2_linux-x64_bin.tar.gz.

[userid]@cloudshell:~ ([project_id])$ curl -O https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  178M  100  178M    0     0  9686k      0  0:00:18  0:00:18 --:--:-- 9827k

Étape 2-1.8

Téléchargez apache-tomcat-9.0.17.tar.gz.

[userid]@cloudshell:~ ([project_id])$ curl -O http://ftp.jaist.ac.jp/pub/apache/tomcat/tomcat-9/v9.0.17/bin/apache-tomcat-9.0.17.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10.2M  100 10.2M    0     0  2726k      0  0:00:03  0:00:03 --:--:-- 2727k

Étape 2-1.9

gradle-5.2.1-bin.tar.gz télécharge gradle-5.2.1-bin.zip pour utiliser la commande ADD de Docker, le décompresse, puis l'archive dans tar.gz.

[userid]@cloudshell:~ ([project_id])$ curl -OL https://services.gradle.org/distributions/gradle-5.2.1-bin.zip
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 83.3M  100 83.3M    0     0  81.6M      0  0:00:01  0:00:01 --:--:--  105M
[userid]@cloudshell:~ ([project_id])$ unzip gradle-5.2.1-bin.zip
   creating: gradle-5.2.1/
  inflating: gradle-5.2.1/getting-started.html
  inflating: gradle-5.2.1/LICENSE
   creating: gradle-5.2.1/media/
  inflating: gradle-5.2.1/media/gradle-icon-16x16.png
・
・
・
  inflating: gradle-5.2.1/lib/plugins/junit-platform-commons-1.3.1.jar
  inflating: gradle-5.2.1/lib/plugins/apiguardian-api-1.0.0.jar
  inflating: gradle-5.2.1/lib/plugins/opentest4j-1.1.1.jar
[userid]@cloudshell:~ ([project_id])$ tar -zcvf gradle-5.2.1-bin.tar.gz gradle-5.2.1
gradle-5.2.1/
gradle-5.2.1/NOTICE
gradle-5.2.1/bin/
gradle-5.2.1/bin/gradle.bat
・
・
・
gradle-5.2.1/media/gradle-icon-64x64.png
gradle-5.2.1/media/gradle-icon-128x128.png
gradle-5.2.1/init.d/
gradle-5.2.1/init.d/readme.txt
gradle-5.2.1/getting-started.html

Étape 2-1.10

Vérifions si les 4 fichiers suivants sont créés correctement avec la commande ls.

[userid]@cloudshell:~ ([project_id])$ ls -Fal
total 364340
drwxr-xr-x 7 [userid] [userid]      4096 Mar  9 17:50 ./
drwxr-xr-x 4 root    root         4096 Mar  9 14:38 ../
-rw-r--r-- 1 [userid] [userid]  10783080 Mar  9 17:36 apache-tomcat-9.0.17.tar.gz
-rw------- 1 [userid] [userid]       489 Mar  9 17:51 .bash_history
-rw-r--r-- 1 [userid] [userid]       220 May 16  2017 .bash_logout
-rw-r--r-- 1 [userid] [userid]      3706 Mar  9 14:38 .bashrc
drwxr-xr-x 3 [userid] [userid]      4096 Mar  9 14:38 .config/
drwx------ 2 [userid] [userid]      4096 Mar  9 14:38 .docker/
-rw-r--r-- 1 [userid] [userid]      1168 Mar  9 16:21 dockerfile
drwxr-xr-x 6 [userid] [userid]      4096 Feb  8 20:03 gradle-5.2.1/
-rw-r--r-- 1 [userid] [userid]  87295238 Mar  9 17:51 gradle-5.2.1-bin.tar.gz
-rw-r--r-- 1 [userid] [userid]  87430521 Mar  9 17:39 gradle-5.2.1-bin.zip
drwxr-xr-x 2 [userid] [userid]      4096 Mar  9 14:44 .kube/
-rw-r--r-- 1 [userid] [userid] 187513052 Mar  9 17:33 openjdk-11.0.2_linux-x64_bin.tar.gz
-rw-r--r-- 1 [userid] [userid]       675 May 16  2017 .profile
lrwxrwxrwx 1 [userid] [userid]        38 Mar  9 14:38 README-cloudshell.txt -> /google/devshell/README-cloudshell.txt
drwxr-xr-x 2 [userid] root         4096 Mar  9 14:38 .theia/
-rw------- 1 [userid] [userid]      1006 Mar  9 16:21 .viminfo

2-2. Créer l'image du menu fixe

Étape 2-2.1

Exécutez la commande suivante dans le répertoire contenant les quatre fichiers créés précédemment pour créer une image Docker, mais avant cela, définissez l'ID du projet dans la variable d'environnement.

[userid]@cloudshell:~ ([project_id])$ export PROJECT_ID="$(gcloud config get-value project -q)"
Your active configuration is: [cloudshell-21915]

Étape 2-2.2

Créez l'image Docker.

[userid]@cloudshell:~ ([project_id])$ docker build --no-cache --rm -t gcr.io/${PROJECT_ID}/sample-app:latest .
Sending build context to Docker daemon  473.3MB
・
・
・
Step 26/26 : CMD ["/opt/apache-tomcat-9.0.17/bin/catalina.sh", "run"]
 ---> Running in 6b1c1d3d8d1f
Removing intermediate container 6b1c1d3d8d1f
 ---> 69ff4ed40a45
Successfully built 69ff4ed40a45
Successfully tagged gcr.io/[project_id]/sample-app:latest

Étape 2-2.3

Vérifiez l'image Docker créée par la commande suivante.

[userid]@cloudshell:~ ([project_id])$ docker images
REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
gcr.io/[project_id]/sample-app   latest              69ff4ed40a45        32 minutes ago      865MB

2-3. Enregistrement dans le registre de l'image Docker

Étape 2-3.1

GKE obtient l'image Docker enregistrée dans Container Registry. Enregistrez l'image Docker que vous avez créée précédemment dans Container Registry.

[userid]@cloudshell:~ ([project_id])$ gcloud docker -- push gcr.io/${PROJECT_ID}/sample-app:latest
WARNING: `gcloud docker` will not be supported for Docker client versions above 18.03.

As an alternative, use `gcloud auth configure-docker` to configure `docker` to
use `gcloud` as a credential helper, then use `docker` as you would for non-GCR
registries, e.g. `docker pull gcr.io/project-id/my-image`. Add
`--verbosity=error` to silence this warning: `gcloud docker
--verbosity=error -- pull gcr.io/project-id/my-image`.

See: https://cloud.google.com/container-registry/docs/support/deprecation-notices#gcloud-docker

The push refers to repository [gcr.io/[project_id]/sample-app]
165d18932f79: Pushed
3903f8c5dac4: Pushed
・
・
・
8294101b3641: Pushed
be99d3b0a3bf: Pushed
0e4c9a7eac59: Pushed
99a6cf5e838e: Pushed
5309f6df6f0b: Pushed
071d8bd76517: Layer already exists
latest: digest: sha256:082443b29ff78220569c1f558442346465fa700ac938f4754e8e506457eacd09 size: 4302

Étape 2-3.

Assurez-vous que vous êtes inscrit dans le registre des conteneurs. 018.png 019.png c'est tout

Recommended Posts

2. Créez une image Docker et enregistrez le registre
Créez une image Docker pour redoc-cli et enregistrez-la sur Docker Hub
Peut-être que ça marche! Créez une image avec Docker et partagez-la!
Utilisez Jenkins pour créer dans Docker, puis créez une image Docker.
Publier l'image Docker dans le registre de packages GitHub
Manuel Docker Compact (4: Créer une image personnalisée)
Installez Docker et créez un environnement d'exécution Java
En savoir plus sur l'image du docker et le FROM du Dockerfile
Tester, créer et pousser des images Docker vers GitHub Container Registry à l'aide d'actions GitHub
[Introduction à Docker] Créer une image Docker pour l'apprentissage automatique et utiliser le notebook Jupyter
Étapes pour pousser une image Docker vers GitHub Container Registry (ghcr.io)
J'ai essayé d'utiliser Wercker pour créer et publier une image Docker qui lance GlassFish 5
Supprimer l'image Docker inutilisée
Jusqu'à ce que vous exécutiez Quarkus et que vous exécutiez l'image docker sur Amazon ECS
Créez une image Docker avec le JDK Oracle installé (miam
Enregistrez votre propre image Docker dans ECR à l'aide de l'AWS CLI
Créez un environnement pour Rails5 et postgresql avec Docker afin que pgadmin puisse également être utilisé
[Docker] Créez une recherche élastique, environnement Kibana!
Installer du fil dans l'image du docker
Extraire des fichiers de Docker Image
Créer un tableau et ajouter des colonnes
Création d'image Docker de l'extension Keycloak et test de performances par Gatling
Flux de travail minimal pour pousser l'image Docker vers Github Container Registry avec des actions Github
Image de l'application Spring Boot à l'aide de jib-maven-plugin et lancez-la avec Docker
[GCP] Jusqu'à ce que vous transmettiez l'image Docker locale à Container Registry
Poussez l'image Docker distribuée par Docker Hub vers Google Container Registry et démarrez la VM en fonction de cette image