{"id":1293,"date":"2025-05-18T09:32:35","date_gmt":"2025-05-18T00:32:35","guid":{"rendered":"https:\/\/itstudy365.com\/blog\/?p=1293"},"modified":"2025-05-27T21:58:03","modified_gmt":"2025-05-27T12:58:03","slug":"kubernetes-learning-%e7%ac%ac14%e7%ab%a0%ef%bc%9aweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%be%8b-%e3%80%9cspring-boot-mysql%e3%82%92kubernetes%e3%81%ab","status":"publish","type":"post","link":"https:\/\/itstudy365.com\/blog\/2025\/05\/18\/kubernetes-learning-%e7%ac%ac14%e7%ab%a0%ef%bc%9aweb%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%be%8b-%e3%80%9cspring-boot-mysql%e3%82%92kubernetes%e3%81%ab\/","title":{"rendered":"Kubernetes Learning \u7b2c14\u7ae0\uff1aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u4f8b \u301cSpring Boot + MySQL\u3092Kubernetes\u306b\u8f09\u305b\u3066\u307f\u308b\u301c"},"content":{"rendered":"\n<button id=\"bb1\" type=\"button\" value=\"Play\" class=\"responsivevoice-button\" title=\"ResponsiveVoice Tap to Start\/Stop Speech\"><span>&#128266; Play<\/span><\/button>\n        <script>\n            bb1.onclick = function(){\n                if(responsiveVoice.isPlaying()){\n                    responsiveVoice.cancel();\n                }else{\n                    responsiveVoice.speak(\"Kubernetes\u306e\u57fa\u672c\u3092\u5b66\u3093\u3067\u304d\u305f\u4eca\u3001\u5b9f\u969b\u306b\u73fe\u5834\u3067\u3088\u304f\u3042\u308b\u69cb\u6210\u3092\u4f8b\u306b\u5168\u4f53\u306e\u6d41\u308c\u3092\u3064\u304b\u3093\u3067\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u69cb\u6210\u306e\u30b7\u30f3\u30d7\u30eb\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6271\u3044\u307e\u3059\uff1a \u30d0\u30c3\u30af\u30a8\u30f3\u30c9\uff1aSpring Boot\uff08Java\u88fdWeb\u30a2\u30d7\u30ea\uff09 \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\uff1aMySQL \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\uff1a\uff08\u4eca\u56de\u306f\u7121\u3057\u3002API\u4e2d\u5fc3\u3067\u69cb\u6210\uff09 \ud83c\udfaf \u30b4\u30fc\u30eb Kubernetes \u4e0a\u306b Spring Boot \u30a2\u30d7\u30ea\u3068 MySQL \u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b \u30a2\u30d7\u30ea\u304b\u3089 MySQL \u306b\u63a5\u7d9a\u3057\u3066\u52d5\u4f5c\u3059\u308b Service \/ ConfigMap \/ Secret \u306a\u3069\u3001\u5b66\u3093\u3067\u304d\u305f\u30ea\u30bd\u30fc\u30b9\u3092\u7dcf\u5408\u7684\u306b\u4f7f\u3046 \ud83d\udd27 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30a4\u30e1\u30fc\u30b8 [Ingress] \u2193 [Spring Boot Pod] --(JDBC)--greater than [MySQL Pod] Spring Boot\u30a2\u30d7\u30ea\u306fREST API\u3092\u63d0\u4f9b DB\u63a5\u7d9a\u60c5\u5831\u306fSecret\u3084ConfigMap\u3067\u7ba1\u7406 Service\u3092\u901a\u3058\u3066Pod\u9593\u901a\u4fe1\u3092\u5b9f\u73fe \ud83e\uddf1 Kubernetes\u4e0a\u306e\u69cb\u6210\u30ea\u30bd\u30fc\u30b9 \u30ea\u30bd\u30fc\u30b9\u5185\u5bb9DeploymentSpring Boot\u30a2\u30d7\u30ea\u7528Pod\u306e\u7ba1\u7406ServiceSpring Boot\u30a2\u30d7\u30ea\u304a\u3088\u3073MySQL\u7528\u30a2\u30af\u30bb\u30b9\u53e3ConfigMapDB\u63a5\u7d9a\u5148\u3084\u74b0\u5883\u5909\u6570\u306a\u3069\u306e\u975e\u6a5f\u5bc6\u8a2d\u5b9aSecretDB\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\u6a5f\u5bc6\u60c5\u5831PersistentVolumeMySQL\u306e\u30c7\u30fc\u30bf\u4fdd\u5b58\u5834\u6240Ingress\u5916\u90e8\u304b\u3089\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30a2\u30d7\u30ea\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0 \ud83e\uddea \u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u4f8b\uff08\u629c\u7c8b\uff09 \u2460 MySQL \u7528 Secret apiVersion: v1 kind: Secret metadata: name: mysql-secret type: Opaque data: MYSQL_ROOT_PASSWORD: cGFzc3dvcmQ= # \\\"password\\\" \u2461 MySQL Deployment apiVersion: apps\/v1 kind: Deployment metadata: name: mysql spec: replicas: 1 selector: matchLabels: app: mysql template: metadata: labels: app: mysql spec: containers: - name: mysql image: mysql:8 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: MYSQL_ROOT_PASSWORD ports: - containerPort: 3306 \u2462 Spring Boot Deployment\uff08\u74b0\u5883\u5909\u6570\u4ed8\u304d\uff09 apiVersion: apps\/v1 kind: Deployment metadata: name: springboot-app spec: replicas: 1 selector: matchLabels: app: springboot template: metadata: labels: app: springboot spec: containers: - name: app image: your-dockerhub-id\/springboot-app:latest env: - name: SPRING_DATASOURCE_URL value: jdbc:mysql:\/\/mysql:3306\/mydb - name: SPRING_DATASOURCE_USERNAME value: root - name: SPRING_DATASOURCE_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: MYSQL_ROOT_PASSWORD ports: - containerPort: 8080 \ud83c\udf10 Ingress \u4f8b\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09 apiVersion: networking.k8s.io\/v1 kind: Ingress metadata: name: springboot-ingress spec: rules: - host: example.local http: paths: - path: \/ pathType: Prefix backend: service: name: springboot-service port: number: 8080 \u203b Ingress\u3092\u4f7f\u3046\u306b\u306f Ingress Controller \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002 \ud83d\udccc \u6ce8\u610f\u70b9\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9 MySQL\u306b\u306f\u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\uff08PersistentVolumeClaim\uff09\u3092\u4f7f\u3046\uff1a\u30c7\u30fc\u30bf\u306e\u6c38\u7d9a\u5316\u306b\u5fc5\u8981 \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306fDB\u306e\u8d77\u52d5\u3092\u5f85\u3066\u308b\u3088\u3046\u306b\u4f5c\u308b\uff1aSpring Boot\u306eretry\u8a2d\u5b9a\u306a\u3069\u3067\u5bfe\u51e6\u53ef Secrets\u306fbase64\u30a8\u30f3\u30b3\u30fc\u30c9\u304c\u5fc5\u8981\u3060\u304c\u6697\u53f7\u5316\u3067\u306f\u306a\u3044\u306e\u3067\u6ce8\u610f Docker\u30a4\u30e1\u30fc\u30b8\u306f\u4e8b\u524d\u306bDocker Hub\u7b49\u306bPush\u3057\u3066\u304a\u304f \u2705 \u52d5\u4f5c\u78ba\u8a8d\u306e\u624b\u9806\uff08\u4f8b\uff09 \u5168\u30ea\u30bd\u30fc\u30b9\u3092 kubectl apply -f \u3067\u9069\u7528 Pod \u304c\u7acb\u3061\u4e0a\u304c\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\uff1a kubectl get pods 3. Spring Boot \u306e\u30ed\u30b0\u3092\u78ba\u8a8d\uff1a kubectl logs deployment\/springboot-app 4. API \u306e\u758e\u901a\u78ba\u8a8d\uff1a curl http:\/\/less thanNodeIPgreater than:less thanNodePortgreater than\/api\/hello \uff08Ingress\u4f7f\u7528\u6642\u306f http:\/\/example.local\/api\/hello \u306a\u3069\uff09 \ud83c\udf93 \u5b66\u7fd2\u306e\u30dd\u30a4\u30f3\u30c8 \u3053\u306e\u69cb\u6210\u4f8b\u3067\u306f\u3001\u3053\u308c\u307e\u3067\u306b\u5b66\u3093\u3060\u591a\u304f\u306eKubernetes\u30ea\u30bd\u30fc\u30b9\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001\u5b9f\u969b\u306eWeb\u30a2\u30d7\u30ea\u3092\u52d5\u304b\u3059\u73fe\u5834\u611f\u3092\u5473\u308f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u307e\u3067\u7406\u89e3\u3067\u304d\u308c\u3070\u3001\u307b\u3068\u3093\u3069\u306eKubernetes\u69cb\u6210\u306b\u5bfe\u3059\u308b\u5fdc\u7528\u304c\u52b9\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002 \ud83d\udce6 \u88dc\u8db3\uff1aSpring Boot\u306eDocker\u30a4\u30e1\u30fc\u30b8\u4f8b FROM eclipse-temurin:17-jdk COPY target\/myapp.jar app.jar ENTRYPOINT [\\\"java\\\", \\\"-jar\\\", \\\"\/app.jar\\\"]\", \"Japanese Female\");\n                }\n            };\n        <\/script>\n    <\/p>\n\n\n\n<p>Kubernetes\u306e\u57fa\u672c\u3092\u5b66\u3093\u3067\u304d\u305f\u4eca\u3001\u5b9f\u969b\u306b<strong>\u73fe\u5834\u3067\u3088\u304f\u3042\u308b\u69cb\u6210<\/strong>\u3092\u4f8b\u306b\u5168\u4f53\u306e\u6d41\u308c\u3092\u3064\u304b\u3093\u3067\u307f\u307e\u3057\u3087\u3046\u3002\u3053\u306e\u7ae0\u3067\u306f\u3001\u6b21\u306e\u3088\u3046\u306a\u69cb\u6210\u306e\u30b7\u30f3\u30d7\u30eb\u306aWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u6271\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ul>\n<li><strong>\u30d0\u30c3\u30af\u30a8\u30f3\u30c9<\/strong>\uff1aSpring Boot\uff08Java\u88fdWeb\u30a2\u30d7\u30ea\uff09<\/li>\n\n\n\n<li><strong>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9<\/strong>\uff1aMySQL<\/li>\n\n\n\n<li><strong>\u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9<\/strong>\uff1a\uff08\u4eca\u56de\u306f\u7121\u3057\u3002API\u4e2d\u5fc3\u3067\u69cb\u6210\uff09<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udfaf \u30b4\u30fc\u30eb<\/h3>\n\n\n\n<ul>\n<li>Kubernetes \u4e0a\u306b Spring Boot \u30a2\u30d7\u30ea\u3068 MySQL \u3092\u30c7\u30d7\u30ed\u30a4\u3059\u308b<\/li>\n\n\n\n<li>\u30a2\u30d7\u30ea\u304b\u3089 MySQL \u306b\u63a5\u7d9a\u3057\u3066\u52d5\u4f5c\u3059\u308b<\/li>\n\n\n\n<li>Service \/ ConfigMap \/ Secret \u306a\u3069\u3001\u5b66\u3093\u3067\u304d\u305f\u30ea\u30bd\u30fc\u30b9\u3092\u7dcf\u5408\u7684\u306b\u4f7f\u3046<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 \u30a2\u30fc\u30ad\u30c6\u30af\u30c1\u30e3\u30a4\u30e1\u30fc\u30b8<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-scss\" data-lang=\"SCSS\"><code>[Ingress]\n   \u2193\n[Spring Boot Pod] --(JDBC)--&gt; [MySQL Pod]<\/code><\/pre><\/div>\n\n\n\n<ul>\n<li>Spring Boot\u30a2\u30d7\u30ea\u306fREST API\u3092\u63d0\u4f9b<\/li>\n\n\n\n<li>DB\u63a5\u7d9a\u60c5\u5831\u306fSecret\u3084ConfigMap\u3067\u7ba1\u7406<\/li>\n\n\n\n<li>Service\u3092\u901a\u3058\u3066Pod\u9593\u901a\u4fe1\u3092\u5b9f\u73fe<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddf1 Kubernetes\u4e0a\u306e\u69cb\u6210\u30ea\u30bd\u30fc\u30b9<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>\u30ea\u30bd\u30fc\u30b9<\/th><th>\u5185\u5bb9<\/th><\/tr><\/thead><tbody><tr><td>Deployment<\/td><td>Spring Boot\u30a2\u30d7\u30ea\u7528Pod\u306e\u7ba1\u7406<\/td><\/tr><tr><td>Service<\/td><td>Spring Boot\u30a2\u30d7\u30ea\u304a\u3088\u3073MySQL\u7528\u30a2\u30af\u30bb\u30b9\u53e3<\/td><\/tr><tr><td>ConfigMap<\/td><td>DB\u63a5\u7d9a\u5148\u3084\u74b0\u5883\u5909\u6570\u306a\u3069\u306e\u975e\u6a5f\u5bc6\u8a2d\u5b9a<\/td><\/tr><tr><td>Secret<\/td><td>DB\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306a\u3069\u6a5f\u5bc6\u60c5\u5831<\/td><\/tr><tr><td>PersistentVolume<\/td><td>MySQL\u306e\u30c7\u30fc\u30bf\u4fdd\u5b58\u5834\u6240<\/td><\/tr><tr><td>Ingress<\/td><td>\u5916\u90e8\u304b\u3089\u306eHTTP\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u30a2\u30d7\u30ea\u306b\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83e\uddea \u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u4f8b\uff08\u629c\u7c8b\uff09<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">\u2460 MySQL \u7528 Secret<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-scss\" data-lang=\"SCSS\"><code>apiVersion: v1\nkind: Secret\nmetadata:\n  name: mysql-secret\ntype: Opaque\ndata:\n  MYSQL_ROOT_PASSWORD: cGFzc3dvcmQ=  # &quot;password&quot;<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u2461 MySQL Deployment<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-scss\" data-lang=\"SCSS\"><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: mysql\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: mysql\n  template:\n    metadata:\n      labels:\n        app: mysql\n    spec:\n      containers:\n        - name: mysql\n          image: mysql:8\n          env:\n            - name: MYSQL_ROOT_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: mysql-secret\n                  key: MYSQL_ROOT_PASSWORD\n          ports:\n            - containerPort: 3306<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\u2462 Spring Boot Deployment\uff08\u74b0\u5883\u5909\u6570\u4ed8\u304d\uff09<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-scss\" data-lang=\"SCSS\"><code>apiVersion: apps\/v1\nkind: Deployment\nmetadata:\n  name: springboot-app\nspec:\n  replicas: 1\n  selector:\n    matchLabels:\n      app: springboot\n  template:\n    metadata:\n      labels:\n        app: springboot\n    spec:\n      containers:\n        - name: app\n          image: your-dockerhub-id\/springboot-app:latest\n          env:\n            - name: SPRING_DATASOURCE_URL\n              value: jdbc:mysql:\/\/mysql:3306\/mydb\n            - name: SPRING_DATASOURCE_USERNAME\n              value: root\n            - name: SPRING_DATASOURCE_PASSWORD\n              valueFrom:\n                secretKeyRef:\n                  name: mysql-secret\n                  key: MYSQL_ROOT_PASSWORD\n          ports:\n            - containerPort: 8080<\/code><\/pre><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">\ud83c\udf10 Ingress \u4f8b\uff08\u30aa\u30d7\u30b7\u30e7\u30f3\uff09<\/h4>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-scss\" data-lang=\"SCSS\"><code>apiVersion: networking.k8s.io\/v1\nkind: Ingress\nmetadata:\n  name: springboot-ingress\nspec:\n  rules:\n    - host: example.local\n      http:\n        paths:\n          - path: \/\n            pathType: Prefix\n            backend:\n              service:\n                name: springboot-service\n                port:\n                  number: 8080<\/code><\/pre><\/div>\n\n\n\n<blockquote class=\"wp-block-quote\">\n<p>\u203b Ingress\u3092\u4f7f\u3046\u306b\u306f Ingress Controller \u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u5fc5\u8981\u3067\u3059\u3002<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc \u6ce8\u610f\u70b9\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ul>\n<li><strong>MySQL\u306b\u306f\u6c38\u7d9a\u30dc\u30ea\u30e5\u30fc\u30e0\uff08PersistentVolumeClaim\uff09\u3092\u4f7f\u3046<\/strong>\uff1a\u30c7\u30fc\u30bf\u306e\u6c38\u7d9a\u5316\u306b\u5fc5\u8981<\/li>\n\n\n\n<li><strong>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306fDB\u306e\u8d77\u52d5\u3092\u5f85\u3066\u308b\u3088\u3046\u306b\u4f5c\u308b<\/strong>\uff1aSpring Boot\u306e<code>retry<\/code>\u8a2d\u5b9a\u306a\u3069\u3067\u5bfe\u51e6\u53ef<\/li>\n\n\n\n<li><strong>Secrets\u306fbase64\u30a8\u30f3\u30b3\u30fc\u30c9\u304c\u5fc5\u8981<\/strong>\u3060\u304c\u6697\u53f7\u5316\u3067\u306f\u306a\u3044\u306e\u3067\u6ce8\u610f<\/li>\n\n\n\n<li>Docker\u30a4\u30e1\u30fc\u30b8\u306f\u4e8b\u524d\u306bDocker Hub\u7b49\u306bPush\u3057\u3066\u304a\u304f<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u2705 \u52d5\u4f5c\u78ba\u8a8d\u306e\u624b\u9806\uff08\u4f8b\uff09<\/h3>\n\n\n\n<ol>\n<li>\u5168\u30ea\u30bd\u30fc\u30b9\u3092 <code>kubectl apply -f<\/code> \u3067\u9069\u7528<\/li>\n\n\n\n<li>Pod \u304c\u7acb\u3061\u4e0a\u304c\u3063\u3066\u3044\u308b\u304b\u78ba\u8a8d\uff1a<\/li>\n<\/ol>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>kubectl get pods<\/code><\/pre><\/div>\n\n\n\n<p>3. Spring Boot \u306e\u30ed\u30b0\u3092\u78ba\u8a8d\uff1a<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>kubectl logs deployment\/springboot-app<\/code><\/pre><\/div>\n\n\n\n<p>4. API \u306e\u758e\u901a\u78ba\u8a8d\uff1a<\/p>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>curl http:\/\/&lt;NodeIP&gt;:&lt;NodePort&gt;\/api\/hello<\/code><\/pre><\/div>\n\n\n\n<p>\uff08Ingress\u4f7f\u7528\u6642\u306f <code>http:\/\/example.local\/api\/hello<\/code> \u306a\u3069\uff09<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83c\udf93 \u5b66\u7fd2\u306e\u30dd\u30a4\u30f3\u30c8<\/h3>\n\n\n\n<p>\u3053\u306e\u69cb\u6210\u4f8b\u3067\u306f\u3001\u3053\u308c\u307e\u3067\u306b\u5b66\u3093\u3060\u591a\u304f\u306eKubernetes\u30ea\u30bd\u30fc\u30b9\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u3001<strong>\u5b9f\u969b\u306eWeb\u30a2\u30d7\u30ea\u3092\u52d5\u304b\u3059\u73fe\u5834\u611f<\/strong>\u3092\u5473\u308f\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u3053\u3053\u307e\u3067\u7406\u89e3\u3067\u304d\u308c\u3070\u3001\u307b\u3068\u3093\u3069\u306eKubernetes\u69cb\u6210\u306b\u5bfe\u3059\u308b\u5fdc\u7528\u304c\u52b9\u304f\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udce6 \u88dc\u8db3\uff1aSpring Boot\u306eDocker\u30a4\u30e1\u30fc\u30b8\u4f8b<\/h3>\n\n\n\n<div class=\"hcb_wrap\"><pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>FROM eclipse-temurin:17-jdk\nCOPY target\/myapp.jar app.jar\nENTRYPOINT [&quot;java&quot;, &quot;-jar&quot;, &quot;\/app.jar&quot;]<\/code><\/pre><\/div>\n\n\n\n<p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[56],"_links":{"self":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1293"}],"collection":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/comments?post=1293"}],"version-history":[{"count":2,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1293\/revisions"}],"predecessor-version":[{"id":1401,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/posts\/1293\/revisions\/1401"}],"wp:attachment":[{"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/media?parent=1293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/categories?post=1293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itstudy365.com\/blog\/wp-json\/wp\/v2\/tags?post=1293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}