Dieser Artikel ist eine Fortsetzung von 1 unten.
GKE erfasst das in der Container-Registrierung registrierte Docker-Image und führt es auf dem in 1 erstellten Knoten aus (vorheriger Artikel) (Webmodul wird ausgeführt). In diesem Artikel erstellen wir ein Docker-Image, das das von Github erhaltene Webmodul auf Tomcat erweitert. Das Docker-Image basiert auf der Docker-Datei. Jetzt erstellen wir eine Docker-Datei und erstellen ein Docker-Image.
Stellen Sie zunächst eine Verbindung zum Kubernetes-Cluster her.
Der Detailbildschirm wird angezeigt. Klicken Sie auf das Quadrat oben rechts, um den Befehl in die Zwischenablage zu kopieren. Klicken Sie dann auf In Cloud Shell ausführen.
Der folgende Bildschirm wird möglicherweise angezeigt, wenn er zum ersten Mal ausgeführt wird. Klicken Sie in diesem Fall auf "Start CLOUD SHELL". Google Cloud Shell ist ein Tool, das Befehlszeilenzugriff auf Computerressourcen bietet, die auf der Google Cloud Platform gehostet werden. Es wird beendet, wenn Sie die Cloud Shell-Sitzung schließen oder länger als eine Stunde nichts tun. Da das Ausgangsverzeichnis jedoch dauerhaft ist, bleibt die Arbeit beim nächsten Start von Cloud Shell erhalten.
Wenn der folgende Bildschirm angezeigt wird, drücken Sie einmal die Eingabetaste, um den bereits eingegebenen Befehl auszuführen (Befehl zum Abrufen der Authentifizierungsinformationen, die für die Interaktion mit dem Kubernetes-Cluster erforderlich sind).
Der Befehl wird ausgeführt und der Status lautet wie folgt.
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])$
Starten Sie anschließend vi und erstellen Sie eine Docker-Datei mit dem folgenden Inhalt.
[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"]
Um den Inhalt der Docker-Datei kurz zu erläutern, wird zunächst centos7 als Basis-Image angegeben. Installieren Sie als Nächstes die Portnummer, die beim Starten des Containers abgehört werden soll, und die Pakete, die zum Abrufen und Kompilieren der Java-Quelle erforderlich sind. Holen Sie sich dann die Java-Quelle von Github und kompilieren Sie sie mit Gradle. Zum Schluss entpacken Sie Tomcat, löschen Sie nicht benötigte Dateien, ändern Sie die Ordnerberechtigungen, starten Sie Tomcat und fertig.
Bereiten Sie als Nächstes die folgenden drei Dateien vor, die zum Erstellen des Docker-Images erforderlich sind.
Laden Sie openjdk-11.0.2_linux-x64_bin.tar.gz herunter.
[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
Laden Sie apache-tomcat-9.0.17.tar.gz herunter.
[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 lädt gradle-5.2.1-bin.zip herunter, um den ADD-Befehl von Docker zu verwenden, entpackt ihn und archiviert ihn dann in 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
Lassen Sie uns mit dem Befehl ls überprüfen, ob die folgenden 4 Dateien ordnungsgemäß erstellt wurden.
[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
Führen Sie den folgenden Befehl in dem Verzeichnis aus, das die vier zuvor erstellten Dateien enthält, um ein Docker-Image zu erstellen. Legen Sie jedoch zuvor die Projekt-ID in der Umgebungsvariablen fest.
[userid]@cloudshell:~ ([project_id])$ export PROJECT_ID="$(gcloud config get-value project -q)"
Your active configuration is: [cloudshell-21915]
Erstellen Sie das Docker-Image.
[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
Überprüfen Sie das Docker-Image, das mit dem folgenden Befehl erstellt wurde.
[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 lässt das Docker-Image in der Container-Registrierung registrieren. Registrieren Sie das zuvor erstellte Docker-Image in der Container-Registrierung.
[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
Stellen Sie sicher, dass Sie in der Containerregistrierung registriert sind. das ist alles
Recommended Posts