ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ Kompose
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅:
- Π£ΠΏΡΠΎΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Docker Compose, Π° Π·Π°ΡΠ΅ΠΌ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ ΡΠ²ΠΎΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π½ΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅.
- ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Π²Π°Ρ docker-compose.yaml Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ kompose convert
- ΠΠΎΠ΄Π½ΡΡΡ ΡΠ²ΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΡ kompose up
- ΠΠ°ΡΡΡΠΈΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ
kompose down
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ Π½Π°ΡΠ½Π΅ΠΌ
ΠΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΌΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎΠΌ, ΠΌΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes ΠΈ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ kubectl, ΡΠΆΠ΅ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π²Π°ΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠ΅ΡΠΎΠΌ.
ΠΡΠ»ΠΈ ΡΡΠΈ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ ΠΏΡΠΎΡΡΠΎΠΉ ΠΊΠ»Π°ΡΡΠ΅Ρ Kubernetes Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ·Π»ΠΎΠΌ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ minikube, ΡΠ»Π΅Π΄ΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌΡ Π½ΠΈΠΆΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Ρ.
ΠΡΠ»ΠΈ Π²Ρ Π³ΠΎΡΠΎΠ²Ρ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ kompose.
βΈοΈ ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ Kubernetes Π΄Π»Ρ Linux β MiniKube ΠΈΠ»ΠΈ MicroK8s
Π¨Π°Π³ 1: Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Kompose Π½Π° Linux, macOS
ΠΠ°Π³ΡΡΠ·ΠΈΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊ Kompose.
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΡΠ°ΡΠ½ΠΈΡΡΒ Github Π½Π° Π²Π΅ΡΡΠΈΠΈ Π²ΡΠΏΡΡΠΊΠ°.
--- Linux ---
curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep linux-amd64 | cut -d '"' -f 4 | wget -qi -
mv kompose-linux-amd64 kompose
--- macOS ---
curl -s https://api.github.com/repos/kubernetes/kompose/releases/latest | grep browser_download_url | grep darwin-amd64 | cut -d '"' -f 4 | wget -qi -
mv kompose-darwin-amd64 kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose
ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ Π²Π΅ΡΡΠΈΡ ΠΏΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ:
Π¨Π°Π³ 2. Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΎΠ±ΡΠ°Π·Π΅Ρ ΠΎΠ±ΡΠ°Π·Π° Dockerfile
ΠΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌΡΡ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ Nginx, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ apache
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠ» Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Dockerfile ΠΈ Π΄ΠΎΠ±Π°Π²ΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π½ΠΈΠΆΠ΅:
cat > Dockerfile<<EOF
# Sample Dockerfile for Kompose
FROM nginx:alpine
COPY nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 8081
EOF
cat >nginx.conf<<EOF
upstream apache-container {
server 0.0.0.0:80;
}
server {
listen 8081;
location / {
proxy_pass http://apache-container;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
EOF
Π¨Π°Π³ 3: Π‘ΠΎΠ±Π΅ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
ΠΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ΅ΡΠΌΠΈΠ½Π°Π» Π² Π²Π°ΡΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΠΈ Π²Π²Π΅Π΄ΠΈΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ, ΡΡΠΎΠ±Ρ ΡΠΎΠ±ΡΠ°ΡΡ Π½Π°Ρ ΠΎΠ±ΡΠ°Π· Ρ ΠΏΠΎΠΌΠΎΡΡΡ podman
$ podman build -t reverseproxy:v1 .
STEP 1: FROM nginx:alpine
Getting image source signatures
Copying blob cbdbe7a5bc2a done
Copying blob c554c602ff32 done
Copying config 89ec9da682 done
Writing manifest to image destination
Storing signatures
STEP 2: COPY nginx.conf /etc/nginx/conf.d/default.conf
--> d86b4e89749
STEP 3: EXPOSE 8081
STEP 4: COMMIT reverseproxy:v1
--> b00d80e0056
b00d80e00560c205e0580d4b751b1a67da7e77e7fc73803b006ff10389bb4732
-- With Docker ---
$ docker build -t reverseproxy:v1 .
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π· Π±ΡΠ» ΡΠΎΠ±ΡΠ°Π½, ΠΌΡ ΡΠΌΠΎΠΆΠ΅ΠΌ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π΅Π³ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ
$ podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
localhost/reverseproxy v1 b00d80e00560 19 seconds ago 21.2 MB
Π¨Π°Π³ 3: ΠΠ΅ΡΠ΅ΠΌΠ΅ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π· ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° Π² ΡΠ΅Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ²
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠ°Π· Π² Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΎΠ±ΡΠ΅Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΡΠ΅Π΅ΡΡΡΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π² ΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ ΡΠΎΠ·Π΄Π°Π»ΠΈ / ΡΠ°ΡΡΠ½ΡΠΉ.
Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅Π΅ΡΡΡ ΠΎΠ±ΡΠ°Π·ΠΎΠ² Docker Hub.
$ podman tag <local-image> docker.io/<username>/reverseproxy:v1
ΠΡΠΈΠΌΠ΅Ρ:
$ podman tag localhost/reverseproxy:v1 docker.io/penchant/reverseproxy:v1
$ podman login docker.io
Username: <username>
Password: <password>
Login Succeeded!
$ podman push docker.io/penchant/reverseproxy:v1
Getting image source signatures
Copying blob 113ce2720837 done
Copying blob 3810cc0c140f done
Copying blob 3e207b409db3 done
Copying config b00d80e005 done
Writing manifest to image destination
Storing signatures
Π¨Π°Π³ 4: Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ docker-compose.yaml
ΠΡΠΎ ΡΠ°ΠΉΠ», ΠΊΠΎΡΠΎΡΡΠΉ Docker Compose Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΡΠ»ΡΡΠΈΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Ρ Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΎΠ΅ΠΊΡΠ°.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΠΎΠ±ΡΠ°Π·, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ, ΡΡΠΎ ΡΠΎΡ, ΡΡΠΎ ΠΌΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π»ΠΈ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΈΠ»ΠΈ Π² DockerHub.
$ vim docker-compose.yaml
version: "3"
services:
reverseproxy:
image: docker.io/penchant/reverseproxy:v1
ports:
- 8081:8081
restart: always
apache:
depends_on:
- reverseproxy
image: httpd:alpine
restart: always
$ kompose convert
INFO Kubernetes file "reverseproxy-service.yaml" created
INFO Kubernetes file "apache-deployment.yaml" created
INFO Kubernetes file "reverseproxy-deployment.yaml" created
ΠΠ΄ΠΈΠ½ – ΡΠ΅ΡΠ²ΠΈΡ, Π΄ΡΡΠ³ΠΎΠΉ – ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΠ΅.
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ kubectl, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅
$ kubectl apply -f reverseproxy-service.yaml,apache-deployment.yaml,reverseproxy-deployment.yaml
service/reverseproxy created
deployment.apps/apache created
deployment.apps/reverseproxy created
ΠΡΠΎΠ²Π΅ΡΠΈΠΌ ΡΠ΅ΡΠ²ΠΈΡ, ΠΏΠΎΠ΄Ρ ΠΈ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ
$ kubectl get deployment,svc,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/apache 1/1 1 1 113m
deployment.apps/reverseproxy 1/1 1 1 105m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 122m
service/reverseproxy ClusterIP 10.97.210.141 <none> 8081/TCP 113m
NAME READY STATUS RESTARTS AGE
pod/apache-7945cd6844-5hpf8 1/1 Running 0 113m
pod/reverseproxy-8646fb7c4f-j6742 1/1 Running 0 105m
ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Π΄Π΅ΡΠ°Π»ΠΈ Π² ΡΠ°ΠΉΠ»Π°Ρ yaml, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ kompose Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π½Π° ΡΠ°ΠΉΠ»Ρ Docker-Compose Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π²Π°ΡΠΈΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡΠΌΠΈ. Π₯ΠΎΡΠΎΡΠΎ, ΡΡΠΎ kompose Π΄Π΅Π»Π°Π΅Ρ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ ΡΡΠΆΠ΅Π»ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ, ΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎ, ΡΡΠΎ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Kompose – ΡΡΠΎ Π·Π°ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ.
ΠΡΠΏΡΡΠ°ΠΉΡΠ΅ ΡΡΠΎ Π² ΡΠ²ΠΎΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π²ΡΡ ΠΌΠΎΡΡ, ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ.
![]()

1 comment
Π§ΡΠΎ Π·Π° Π±ΡΠ΅Π΄ΠΎΠ²ΡΠΉ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ (((