Cet article est la suite de 1 ci-dessous.
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.
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.
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". 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.
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).
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])$
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é.
Ensuite, préparez les trois fichiers suivants requis pour créer l'image Docker.
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
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
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
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
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]
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
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
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
Assurez-vous que vous êtes inscrit dans le registre des conteneurs. c'est tout
Recommended Posts