웹 응용 프로그램에서 Docker 이미지, Kubernetes 배포
13934 단어 kubernetesdockertutorialjava
Java 애플리케이션에서 Kubernetes로 배포
이 강좌에서는 Java 웹 응용 프로그램에서 시작하여 이 응용 프로그램을 포함하는 Docker 이미지를 만들고 로컬 Kubernetes 그룹에 배치합니다.이 안내서는 웹 응용 프로그램을 컴파일하는 것부터 Kubernetes에서 실행하는 데 필요한 모든 절차를 보여 줍니다.비록 많은 우수한 소스 오픈 도구가 이 모든 절차를 실행할 수 있지만, 우리는 명령줄에서 모든 절차를 수동으로 실행할 것이다.
Kubernetes는 집단에 용기화 응용 프로그램을 배치하는 시스템이다.이것은 웹 응용 프로그램을 만드는 것과 서버에서 실행하는 웹 응용 프로그램을 분리할 수 있도록 합니다.Kubernetes 클러스터에서 실행되는 엔티티는 일반적으로 Docker 이미지와 같은 컨테이너 응용 프로그램입니다.
이 강좌에서는 docker
및 kubectl
(Kubernetes) 명령행 도구를 사용합니다.이 두 도구 모두 Docker desktop tools 를 통해 설치할 수 있습니다.이 강좌의 일부로서, Docker 도구를 설치합니다. 이 방식을 통해 이 강좌에서 말한 것과 같은 명령을 기계에서 실행할 수 있습니다.이 강좌가 끝날 때, Kubernetes 그룹에 웹 응용 프로그램을 설치할 것입니다.😊
운영 체제에서 웹 응용 프로그램 실행
우리가 사용할 웹 응용 프로그램은 Java Spring Boot 웹 응용 프로그램입니다.간단하게 보기 위해서, 우리는 공식 스프링 부트 강좌 중의 간단한 existing application 를 사용할 것이다.이 웹 응용 프로그램은 REST 서비스로 HTTP GET 노드를 공개합니다.
이 절의 선결 조건으로 Git, JDK, (Java 8 또는 업데이트 버전) 및 Maven 이 필요합니다.먼저 Java 항목을 다운로드한 다음 Maven을 사용하여 컴파일합니다.
$ git clone https://github.com/spring-guides/gs-rest-service.git
$ cd gs-rest-service\complete
$ mvn clean package
$ cp target/rest-service-0.0.1-SNAPSHOT.jar ../..
$ cd ../..
세 번째 명령은 Java 응용 프로그램을 컴파일하고 웹 응용 프로그램을 JAR 파일에 패키지화합니다.target
폴더에서 JAR 파일을 찾습니다.
다음은 java
명령을 사용하여 웹 응용 프로그램을 실행할 수 있습니다.
$ java -jar rest-service-0.0.1-SNAPSHOT.jar
터미널에서 많은 줄을 볼 수 있습니다. 스프링 응용 프로그램의 상하문이 초기화되었습니다. 응용 프로그램은 8080 포트에서 공개됩니다.
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
2020-03-26 20:56:13.857 INFO 18504 --- [ main] c.e.restservice.RestServiceApplication : Starting RestServiceApplication v0.0.1-SNAPSHOT on Philipp-PC with PID 18504 [...]
[...]
2020-03-26 20:56:17.477 INFO 18504 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-03-26 20:56:17.481 INFO 18504 --- [ main] c.e.restservice.RestServiceApplication : Started RestServiceApplication in 4.834 seconds (JVM running for 5.736)
GET 방법을 사용하여 REST 서비스를 호출하여 웹 응용 프로그램이 제대로 작동하는지 확인할 수 있습니다.가장 좋아하는 웹 브라우저에서 URL로 이동합니다: http://localhost:8080/greeting.다음과 같은 메시지가 표시됩니다.
{"id":1,"content":"Hello, World!"}
Docker images 소개
Docker 데스크톱 도구가 설치되어 있는지 확인합니다.모든 설치 지침here을 찾을 수 있습니다.
Docker는 PaaS(플랫폼 즉 서비스) 범주에 속하며 소스를 시작합니다.간단히 말하면 Docker는 컨테이너에서 응용 프로그램을 실행합니다(예를 들어 우리의 웹 응용 프로그램).용기는 하나의 운영체제, 실행할 응용 프로그램과 모든 의존항을 포함하는 외부 세계와 격리된다.Docker 워크플로우는 다음과 같습니다.
우리가 사용할 웹 응용 프로그램은 Java Spring Boot 웹 응용 프로그램입니다.간단하게 보기 위해서, 우리는 공식 스프링 부트 강좌 중의 간단한 existing application 를 사용할 것이다.이 웹 응용 프로그램은 REST 서비스로 HTTP GET 노드를 공개합니다.
이 절의 선결 조건으로 Git, JDK, (Java 8 또는 업데이트 버전) 및 Maven 이 필요합니다.먼저 Java 항목을 다운로드한 다음 Maven을 사용하여 컴파일합니다.
$ git clone https://github.com/spring-guides/gs-rest-service.git
$ cd gs-rest-service\complete
$ mvn clean package
$ cp target/rest-service-0.0.1-SNAPSHOT.jar ../..
$ cd ../..
세 번째 명령은 Java 응용 프로그램을 컴파일하고 웹 응용 프로그램을 JAR 파일에 패키지화합니다.target
폴더에서 JAR 파일을 찾습니다.다음은
java
명령을 사용하여 웹 응용 프로그램을 실행할 수 있습니다.$ java -jar rest-service-0.0.1-SNAPSHOT.jar
터미널에서 많은 줄을 볼 수 있습니다. 스프링 응용 프로그램의 상하문이 초기화되었습니다. 응용 프로그램은 8080 포트에서 공개됩니다. . ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.2.RELEASE)
2020-03-26 20:56:13.857 INFO 18504 --- [ main] c.e.restservice.RestServiceApplication : Starting RestServiceApplication v0.0.1-SNAPSHOT on Philipp-PC with PID 18504 [...]
[...]
2020-03-26 20:56:17.477 INFO 18504 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2020-03-26 20:56:17.481 INFO 18504 --- [ main] c.e.restservice.RestServiceApplication : Started RestServiceApplication in 4.834 seconds (JVM running for 5.736)
GET 방법을 사용하여 REST 서비스를 호출하여 웹 응용 프로그램이 제대로 작동하는지 확인할 수 있습니다.가장 좋아하는 웹 브라우저에서 URL로 이동합니다: http://localhost:8080/greeting.다음과 같은 메시지가 표시됩니다.{"id":1,"content":"Hello, World!"}
Docker images 소개
Docker 데스크톱 도구가 설치되어 있는지 확인합니다.모든 설치 지침here을 찾을 수 있습니다.
Docker는 PaaS(플랫폼 즉 서비스) 범주에 속하며 소스를 시작합니다.간단히 말하면 Docker는 컨테이너에서 응용 프로그램을 실행합니다(예를 들어 우리의 웹 응용 프로그램).용기는 하나의 운영체제, 실행할 응용 프로그램과 모든 의존항을 포함하는 외부 세계와 격리된다.Docker 워크플로우는 다음과 같습니다.
Docker 애플리케이션 구축 및 실행
Docker 이미지는 계층화됩니다. 각 이미지는 더 많은 엔티티를 추가하여 다른 이미지에 기반합니다.이미지 생성 프로세스를 투명하게 하기 위해 Docker 파일을 사용했습니다.이 Docker 파일에는 Docker 이미지를 만드는 방법에 대한 모든 정보가 들어 있습니다.다음과 같은 내용으로 Dockerfile
라는 파일을 만듭니다.
FROM openjdk:8-jre-alpine
COPY rest-service-0.0.1-SNAPSHOT.jar /my-app.jar
CMD java -jar /my-app.jar
첫 번째 줄에는 Java 8 런타임 환경이 포함된 기본 이미지가 지정되어 있습니다.다음 줄에서 웹 응용 프로그램을 이미지로 복사합니다.마지막 줄에서 그림이 Docker 용기로 실행될 때 어떻게 되는지 설명합니다. 웹 응용 프로그램이 실행됩니다.
이제 Docker 파일을 사용하여 자체 이미지를 만듭니다.
$ docker build -t my-app:0.0.1 .
다음 명령을 사용하여 알려진 모든 Docker 이미지를 나열할 수 있습니다.
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app 0.0.1 32b488088806 25 minutes ago 103MB
openjdk 8-jre-alpine f7a292bbb70c 10 minutes ago 84.9MB
위의 명령은 my-app
이라는 사용자 정의 이미지를 표시해야 합니다.이제 Docker 이미지를 실행할 예정입니다.Kubernetes를 사용하지 않고 docker
명령을 사용하여 이미지를 실행합니다.
$ docker run -p 8080:8080 -d my-app:0.0.1
c5a91de6d0d6ffe692434548ff2ce6fdcc2c89fa02f7bc621c0c132ddfe2589a
축하합니다. 방금 Docker 용기에서 웹 서비스를 시작했습니다.😊 URLhttp://localhost:8080/greeting로 이동하여 웹 응용 프로그램이 예상대로 실행되고 있는지 확인합니다.Docker는 Docker 이미지를 생성, 실행 및 모니터링하는 다양한 명령을 제공합니다.실행 중인 Docker 이미지를 나열하려면 다음을 입력하십시오.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5a91de6d0d6 my-app:0.0.1 "/bin/sh -c 'java -j…" 2 minutes ago Up 21 seconds 0.0.0.0:8080->8080/tcp funny_dhawan
마지막으로 docker stop
를 입력하여 실행 중인 컨테이너를 중지할 수 있습니다.
Docker 파일에 대한 자세한 내용은 공식 문서here를 참조하십시오.
쿠베르니테스 소개
Kubernetes는 클라우드 응용 프로그램을 배치, 감시, 확장하는 데 사용되는 시스템이다.그것은 최초로 구글이 개발한 것으로 기원된 것이다.Kubernetes는 컨테이너 어플리케이션을 실행합니다.
Kubernetes에서 이미지의 단일 실행 실례를pod라고 하는데, RESTful 웹 서비스를 사용하면 보통 같은 프로그램의 여러 개의pod가 병행 실행됩니다.Kubernetes는 작업 부하가 심할 때 더 많은pod를 시작하거나 건강하지 않은pod를 검출할 수 있도록 계산 자원을pod에 쉽게 분배할 수 있습니다.
Docker desktop tools 설치에는 로컬 Kubernetes 서버가 포함되어 있습니다.클라우드에 있는 것처럼 Kubernetes에 작업 부하를 로컬로 배치할 수 있지만, 테스트 목적으로만 사용할 수 있습니다.현실에서 Kubernetes를 사용하여 아마존 클라우드나 구글 클라우드 같은 진정한 클라우드 인프라에 응용 프로그램을 배치할 것입니다.
Kubernetes 클러스터에서 애플리케이션 실행
이 섹션에서는 Kubernetes를 사용하여 Docker 이미지를 배포합니다.더 구체적으로 말하면 kubectl
명령줄 도구와 Kubernetes 파일을 사용하여 프로그램을 실행할 것입니다.
우선 Kubernetes가 활성 상태인지 확인하고 기계에서 실행해야 합니다(설명 참조here.
둘째, 우리는 기중기를 발사하고 싶다.이를 위해, 우리는 통상적으로 사용한다Deployment files.Kubernetes는 필요한 크레인 가동을 확보하고 필요할 때 불건전한 크레인을 교체할 수도 있다.
다음 배포 파일deployment.yml
을 만듭니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deploy
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:0.0.1
ports:
- containerPort: 8080
배치 파일은 실행할 docker 이미지(containers: name
, 시작할 Pod 수(replicas
, 노출된 포트(containerPort
를 지정합니다.또는 최대 CPU 및 메모리 사용량과 같은 리소스 제약을 추가할 수 있습니다.
$ kubectl apply -f deployment.yml
deployment.apps/my-app-deploy created
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-app-deploy 1/1 1 1 1min
$ kubectl describe deployment my-app-deploy
첫 번째 줄에서 Kubernetes 배포를 만듭니다.그러면 관련 POD가 자동으로 시작되며kubectl get pods
를 사용하여 확인할 수 있습니다.두 번째 줄은 모든 배치의 목록이고, 세 번째 줄은 우리가 배치한 모든 상세한 정보이다.우리의 배치는 하나의pod만 시작하는 것으로 설정되어 있습니다.이 구성을 두 개의 복제본으로 변경할 수 있습니다.
$ kubectl scale --replicas=2 deployment/my-app-deploy
deployment.extensions/my-app-deploy scaled
$ kubectl describe deployments my-app-deploy
너는 우리가 두 개의 달리기 선실이 있는데, 모두 사용 가능한 상태에 있다는 것을 볼 수 있다.
현재, 우리의 웹 응용 프로그램은 집단적으로 실행되고 있지만, 이 웹 응용 프로그램에 직접 접근할 수 없습니다.POD의 IP 주소는 Kubernetes 클러스터에서만 액세스할 수 있습니다.현재의 문제는 우리가 어떻게 집단 밖에서 우리의 웹 응용 프로그램을 테스트합니까?우리의pod가 장차 교체될 수 있기 때문에 IP 주소가 바뀔 수 있다는 것을 고려할 때 이 문제는 더욱 까다롭다.좋은 소식은 Kubernetes가 Services
라는 간단한 해결 방안을 제공했다는 것이다.
Kubernetes Services는 하나의 IP 주소에 여러 POD를 공개하는 추상적인 방식입니다.파일service.yml
을 통해 서비스를 만들 수 있습니다.
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: my-app
$ kubectl create -f service.yml
service/my-app-service created
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d1h
my-app-service ClusterIP 10.104.130.56 <none> 80/TCP 24s
Dellmy-app-service
서비스의 IP 주소는 여전히 클러스터 내에서만 액세스할 수 있습니다.우리는 포트 전송을 사용하여 이 문제를 해결할 수 있다.운영 준비 환경에서는 NodePort
또는 LoadBalancer
유형의 서비스와 같은 다른 솔루션을 사용할 수 있습니다.
$ kubectl port-forward service/my-app-service 8081:80
저희 웹 응용 프로그램은 현재 localhost
의 URLhttp://localhost:8081/greeting을 통해 접근할 수 있습니다.축하합니다. Kubernetes 집단이 현재 웹 응용 프로그램을 위탁 관리하고 있습니다. 웹 브라우저에서 접근할 수 있습니다.😊
서비스 및 팟캐스트를 종료하려면 다음을 입력합니다.
$ kubectl delete deployment my-app-deploy
deployment.extensions "my-app-deploy" deleted
$ kubectl delete service my-app-service
service "my-app-service" deleted
총결산
클라우드 배포 파이핑에서 가장 중요한 단계를 요약해 보겠습니다.
FROM openjdk:8-jre-alpine
COPY rest-service-0.0.1-SNAPSHOT.jar /my-app.jar
CMD java -jar /my-app.jar
$ docker build -t my-app:0.0.1 .
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my-app 0.0.1 32b488088806 25 minutes ago 103MB
openjdk 8-jre-alpine f7a292bbb70c 10 minutes ago 84.9MB
$ docker run -p 8080:8080 -d my-app:0.0.1
c5a91de6d0d6ffe692434548ff2ce6fdcc2c89fa02f7bc621c0c132ddfe2589a
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c5a91de6d0d6 my-app:0.0.1 "/bin/sh -c 'java -j…" 2 minutes ago Up 21 seconds 0.0.0.0:8080->8080/tcp funny_dhawan
Kubernetes는 클라우드 응용 프로그램을 배치, 감시, 확장하는 데 사용되는 시스템이다.그것은 최초로 구글이 개발한 것으로 기원된 것이다.Kubernetes는 컨테이너 어플리케이션을 실행합니다.
Kubernetes에서 이미지의 단일 실행 실례를pod라고 하는데, RESTful 웹 서비스를 사용하면 보통 같은 프로그램의 여러 개의pod가 병행 실행됩니다.Kubernetes는 작업 부하가 심할 때 더 많은pod를 시작하거나 건강하지 않은pod를 검출할 수 있도록 계산 자원을pod에 쉽게 분배할 수 있습니다.
Docker desktop tools 설치에는 로컬 Kubernetes 서버가 포함되어 있습니다.클라우드에 있는 것처럼 Kubernetes에 작업 부하를 로컬로 배치할 수 있지만, 테스트 목적으로만 사용할 수 있습니다.현실에서 Kubernetes를 사용하여 아마존 클라우드나 구글 클라우드 같은 진정한 클라우드 인프라에 응용 프로그램을 배치할 것입니다.
Kubernetes 클러스터에서 애플리케이션 실행
이 섹션에서는 Kubernetes를 사용하여 Docker 이미지를 배포합니다.더 구체적으로 말하면 kubectl
명령줄 도구와 Kubernetes 파일을 사용하여 프로그램을 실행할 것입니다.
우선 Kubernetes가 활성 상태인지 확인하고 기계에서 실행해야 합니다(설명 참조here.
둘째, 우리는 기중기를 발사하고 싶다.이를 위해, 우리는 통상적으로 사용한다Deployment files.Kubernetes는 필요한 크레인 가동을 확보하고 필요할 때 불건전한 크레인을 교체할 수도 있다.
다음 배포 파일deployment.yml
을 만듭니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deploy
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:0.0.1
ports:
- containerPort: 8080
배치 파일은 실행할 docker 이미지(containers: name
, 시작할 Pod 수(replicas
, 노출된 포트(containerPort
를 지정합니다.또는 최대 CPU 및 메모리 사용량과 같은 리소스 제약을 추가할 수 있습니다.
$ kubectl apply -f deployment.yml
deployment.apps/my-app-deploy created
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-app-deploy 1/1 1 1 1min
$ kubectl describe deployment my-app-deploy
첫 번째 줄에서 Kubernetes 배포를 만듭니다.그러면 관련 POD가 자동으로 시작되며kubectl get pods
를 사용하여 확인할 수 있습니다.두 번째 줄은 모든 배치의 목록이고, 세 번째 줄은 우리가 배치한 모든 상세한 정보이다.우리의 배치는 하나의pod만 시작하는 것으로 설정되어 있습니다.이 구성을 두 개의 복제본으로 변경할 수 있습니다.
$ kubectl scale --replicas=2 deployment/my-app-deploy
deployment.extensions/my-app-deploy scaled
$ kubectl describe deployments my-app-deploy
너는 우리가 두 개의 달리기 선실이 있는데, 모두 사용 가능한 상태에 있다는 것을 볼 수 있다.
현재, 우리의 웹 응용 프로그램은 집단적으로 실행되고 있지만, 이 웹 응용 프로그램에 직접 접근할 수 없습니다.POD의 IP 주소는 Kubernetes 클러스터에서만 액세스할 수 있습니다.현재의 문제는 우리가 어떻게 집단 밖에서 우리의 웹 응용 프로그램을 테스트합니까?우리의pod가 장차 교체될 수 있기 때문에 IP 주소가 바뀔 수 있다는 것을 고려할 때 이 문제는 더욱 까다롭다.좋은 소식은 Kubernetes가 Services
라는 간단한 해결 방안을 제공했다는 것이다.
Kubernetes Services는 하나의 IP 주소에 여러 POD를 공개하는 추상적인 방식입니다.파일service.yml
을 통해 서비스를 만들 수 있습니다.
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: my-app
$ kubectl create -f service.yml
service/my-app-service created
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d1h
my-app-service ClusterIP 10.104.130.56 <none> 80/TCP 24s
Dellmy-app-service
서비스의 IP 주소는 여전히 클러스터 내에서만 액세스할 수 있습니다.우리는 포트 전송을 사용하여 이 문제를 해결할 수 있다.운영 준비 환경에서는 NodePort
또는 LoadBalancer
유형의 서비스와 같은 다른 솔루션을 사용할 수 있습니다.
$ kubectl port-forward service/my-app-service 8081:80
저희 웹 응용 프로그램은 현재 localhost
의 URLhttp://localhost:8081/greeting을 통해 접근할 수 있습니다.축하합니다. Kubernetes 집단이 현재 웹 응용 프로그램을 위탁 관리하고 있습니다. 웹 브라우저에서 접근할 수 있습니다.😊
서비스 및 팟캐스트를 종료하려면 다음을 입력합니다.
$ kubectl delete deployment my-app-deploy
deployment.extensions "my-app-deploy" deleted
$ kubectl delete service my-app-service
service "my-app-service" deleted
총결산
클라우드 배포 파이핑에서 가장 중요한 단계를 요약해 보겠습니다.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deploy
spec:
replicas: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: my-app:0.0.1
ports:
- containerPort: 8080
$ kubectl apply -f deployment.yml
deployment.apps/my-app-deploy created
$ kubectl get deployments
NAME READY UP-TO-DATE AVAILABLE AGE
my-app-deploy 1/1 1 1 1min
$ kubectl describe deployment my-app-deploy
$ kubectl scale --replicas=2 deployment/my-app-deploy
deployment.extensions/my-app-deploy scaled
$ kubectl describe deployments my-app-deploy
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
ports:
- port: 80
targetPort: 8080
selector:
app: my-app
$ kubectl create -f service.yml
service/my-app-service created
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 5d1h
my-app-service ClusterIP 10.104.130.56 <none> 80/TCP 24s
$ kubectl port-forward service/my-app-service 8081:80
$ kubectl delete deployment my-app-deploy
deployment.extensions "my-app-deploy" deleted
$ kubectl delete service my-app-service
service "my-app-service" deleted
클라우드 배포 파이핑에서 가장 중요한 단계를 요약해 보겠습니다.
이 주제에 관심 가져주셔서 감사합니다!질문이나 건의가 있으면 댓글을 남겨주세요!
Reference
이 문제에 관하여(웹 응용 프로그램에서 Docker 이미지, Kubernetes 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pmgysel/from-a-web-application-to-a-docker-image-to-a-deployment-with-kubernetes-171b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)