on
도커 데스크톱 없이 개발 라이프가 존재할 수 있습니까?
도커 데스크톱 없이 개발 라이프가 존재할 수 있습니까?
도커 데스크톱은 직원 250명 이상 또는 매출 1,000만 달러 이상인 기업에 대해 구독료를 부과합니다. 그리 큰 수수료는 아닙니다. 귀사가 이미 도커 허브 사설 저장소를 사용하고 있다면, 귀하도 부담하실 수 있습니다. 하지만 이런 질문을 던집니다. 개발용 컴퓨터에서 도커 데스크톱 없이 살 수 있을까요? 저는 답은 그렇다 고 믿고, 어떻게 하는지 보여드리겠습니다.
도커에는 빌딩 이미지와 실행 중인 이미지라는 두 가지 뚜렷한 측면을 교체해야 합니다. 빌딩 이미지에는 도커가 아닌 여러 솔루션이 있지만 저는 구글 지브를 선택할 것입니다. 실행 중인 이미지에는 MicroK8s를 사용할 것입니다. 두 솔루션 모두 사소한 변경만으로 대부분의 Java 마이크로 서비스에서 작동합니다.
이러한 솔루션에 무엇이 필요한지 설명하기 위해, 저는 제 블록 체인 마이크로 서비스를 도커 컴포지트에서 Kubernetes 기반 MicroK8s로 변환하려고 합니다. 이 서비스들은 이미 구글 집(Google Jib)을 사용하고 있습니다. 제 자바 서비스 대부분이 그렇듯이요. 하지만 저는 여러분의 서비스를 전환하기 위해 여러분이 해야 할 일을 살펴보겠습니다. 관련 코드에 대한 자세한 내용은 블록 체인 마이크로서비스에 대한 내 기사를 참조하십시오.
도커 이미지를 구축하는 한 가지 방법은 플랫폼별 운영이 필요한 경우 VM 내부에서 빌드를 수행해야 한다는 것입니다. 여기서 Java의 한 번 쓰기 실행 기능이 유용하며 대부분의 빌드에 필요한 플랫폼별 작업이 없습니다. 따라서 Jib은 기본 JRE 이미지에 종속 항아리, 빌드의 클래스 파일, 빌드의 리소스 파일 등 세 가지 레이어를 추가합니다. 이렇게 하면 리소스 파일만 변경할 경우 작은 계층만 재구성하면 됩니다. 종속성을 변경하는 경우에만 세 계층을 모두 구축해야 합니다.
Jib을 사용하려면 이미지를 생성하는 모든 프로젝트의 pom.xml 파일에 메이븐 플러그인을 추가하면 됩니다. 도커파일(Dockerfile)은 필요 없다. 왜냐하면 이미지를 만드는 방법은 모든 자바 어플리케이션에서 매우 유사하기 때문이다. 유일한 차이점은 이미지 시작 시 실행할 기본 클래스를 찾는 방법과 시작 방법입니다. Jib은 독특한 메인 클래스를 찾는 것을 잘하지만, 만약 여러분이 둘 이상의 메인 클래스를 가지고 있거나 여러분의 메인 클래스가 종속 항아리에 있다면 그것은 도움이 필요할 것입니다. 간단한 경우 구성이 필요하지 않으며 Java Spring-Boot 서비스에서는 즉시 사용할 수 있습니다.
<빌드> <플러그인스> <예언> com.google.cloud.도구 jib-maven-plugin <버전>3.1.4
그러면 adoptopenjdk:11-jre 를 기본으로 사용하여 이미지를 생성하고 메이븐 아티팩트 ID로 이름을 지정합니다. 한 가지 문제는 이미지를 로컬에 저장할 도커가 없기 때문에 리포지토리에 푸시해야 한다는 것입니다. 원격 리포지토리로 밀고 당기는 데 시간이 걸릴 수 있지만 로컬 컨테이너 저장소를 실행하여 이 문제를 완화할 수 있습니다. 아직 그렇게 하지 않아도 되니까, 어떻게 해야 할지 알아내야 할 거예요.
이 기사를 작성하는 동안 도커 데스크톱을 제거했기 때문에 직면했던 한 가지 문제는 구성 파일이 도커 허브 사용자 이름과 암호를 MacOS 키체인에 저장하기 위해 자격 증명 도우미를 사용했다는 것입니다. 그래서 나는 DockerHub에 대한 내 username:password 의 기본 64 인코딩인 auth 값을 내 .docker/config.json 에 추가했다(기본 인증과 동일).
{ "auths" : { "https://index.docker.io/v1/" : { "auth": "<여기 사용자 이름 암호>" } } }
이 변경으로 저는 간단한 명령으로 모든 이미지를 만들 수 있었습니다.
mvn 설치 jib:build
도커 데스크톱을 설치하지 않고도 이 모든 것을 수행할 수 있습니다. pom.xml에 몇 줄만 더 쓰고 도커파일(및 더 이상 필요 없는 스프링 부트 메이븐 플러그인)은 없앴다.
MicroK8 설치
Brew를 사용하여 MicroK8을 설치할 수 있습니다. 다음과 같은 명령이 내게 효과가 있었다.
우분투/마이크로k8s/마이크로k8s를 설치하다 마이크로k8 설치
Brew MicroK8s 설치는 필요에 따라 VM 생성을 처리하기 위해 Mac에 멀티패스를 설치해야 했습니다. microk8s install 명령은 우분투 VM을 회전시켜 여기에 microK8s를 설치한 뒤 맥에 microk8s 명령을 설치해 이를 대리하는 것처럼 보인다. 새 VM에 셸링하여 이 사실을 확인할 수 있습니다.
다중 패스 셸 마이크로k8s-VM ... 마이크로k8s ... 퇴장을 명하다
MicroK8을 설치한 후에는 다음 명령을 사용하여 dns, storage, helm3 등의 애드온을 설치해야 합니다.
microk8s 사용 DNS 마이크로k8s는 조타 장치3를 활성화한다. 마이크로k8s는 저장을 가능하게 한다.
마지막으로, 우리는 쿠벡틀 과 헬름 CLI와 더불어 삶을 편리하게 하기 위해 설치할 것, 즉 멋진 쿠버네테스 유틸리티 k9s를 추가해야 한다. CLI를 설치하는 방법은 다음과 같습니다.
쿠벡틀을 양조하다 양조 장치를 하다. 인스톨 k9s를 양조하다.
그런 다음 새 클러스터를 가리키는 kubectl 에 대한 구성 파일을 만듭니다(이미 ~/kube/config 파일이 있는 경우 백업하고 마이크로k8이 생성한 하나의 클러스터와 병합해야 합니다).
js mkdir ~//kube microk8s config > ~//kube/config
k9s를 실행하여 테스트합니다.  Ctrl-C로 나가세요. 이제 배포 생성을 시작할 준비가 되었습니다. ## 외부 서비스 설치 서비스를 설치하기 전에 Kafka와 MongoDB라는 두 가지 외부 서비스를 설치해야 합니다. Bitnami는 일반적으로 이러한 유형의 서비스에 대해 개발 목적으로 시작하고 실행할 수 있도록 상당히 우수한 조타 차트를 제공합니다. Kafka와 MongoDB는 상태 저장이므로 프로덕션 환경에서 Kubernetes 외부에서 실행하는 것을 고려할 수 있습니다. 하지만 우리는 개발 환경에 대해 이야기하고 있습니다. 로컬 Kubernetes에서 이러한 서비스를 실행하면 여러 개발자가 공유 Kafka 대기열을 채우거나 잘못된 데이터를 데이터베이스에 넣지 않기 때문에 서로 밟지 않아도 됩니다. 제가 Blockchain 서비스에 직면했던 한 가지 문제는 노드 간 통신을 증명하고 싶다는 것이었습니다. 즉, 어떤 방법으로든 모호하지 않은 각 서비스를 두 개 이상 만들어야 합니다. 원본에는 도커 구성 파일이 두 개 있었다. 이 경우 노드를 분리하기 위해 두 개의 개별 네임스페이스를 만듭니다. 네임스페이스는 거의 가상 클러스터를 생성하며, 네임스페이스 간의 통신을 명시적으로 정의해야 합니다. 다음 명령을 사용하여 `node1` 및 `node2` 네임스페이스를 생성해 보겠습니다. ```js kubectl 네임스페이스 노드 1 생성 kubectl 네임스페이스 노드2 생성 ``` Bitnami Helm 차트를 통해 MongoDB를 설치하는 방법은 이 링크에서 확인할 수 있습니다. Kafka에 대한 지침은 이 링크에서 찾을 수 있습니다. 제가 한 일은 다음과 같습니다. ```js 조타력 추가 비트나미 https://charts.bitnami.com/bitnami 조타 장치 설치 mongo bitnami/mongodb -node1 조타 장치 설치 mongo bitnami/mongodb -node2 조타 장치 설치 카프카 비트나미/카프카 -n 노드1 조타 장치 설치 카프카 비트나미/카프카 -n 노드2 ``` 이번 몽고DB 설치로 네임스페이스마다 몽고몽고드브라는 비밀이 만들어진다. ## 서비스 설치 이전에는 도커 컴포지트에서 서비스를 시작했으므로, 콤포즈 유틸리티로 전환할 수 있습니다. 나는 `docker` 작곡에서 모든 외부 서비스를 제거하는 것으로 시작했다.그리고 나서 호스트명을 내부 쿠베르네테스 DSN 이름인 카프카와 몽고몽고드로 바꿨다. `kompose` CLI를 로컬에 설치하고 다음 명령을 사용하여 실행했습니다. ```js curl -L https://github.com/kubernetes/kompose/releases/download/v1.22.0/kompose-darwin-amd64 -o kompose chmod +x kompose ./kompose 변환 -c ``` 이로써 세 가지 서비스를 모두 실행하는 데 필요한 모든 차트가 생성되었습니다. .helm/blocknode로 바꿨지만 docker-composing이라는 디렉토리가 만들어집니다. 다음에 내가 해야 할 일은 아래에 나와 있는 세 개의 배포 파일에서 MongoDB 조타 장치에 의해 만들어진 비밀에서 MongoDB 암호를 얻는 것이었다. ```js 사양: 컨테이너: - 부럽다. - 이름: MONGO_HOST 값: 몽고몽고드 - 이름: MONGO_PASS 값시작: secretKeyRef: 이름: 몽고몽고드 키: mongodb-root-password ``` 이제 새 조타 장치 차트를 설치할 수 있습니다. ```js 조타 장치 설치 블록 노드 .blocknode/blocknode -nnode1 ``` k9s를 실행해서 모든 것이 실행되고 있는지 확인합니다. 다음은 이미지입니다.  아직까지는 좋아! 이제 `node2`에도 동일한 작업을 수행합니다. 모든 것을 테스트하기 위해 포트 포워딩을 좀 하려고 합니다. 쉬워진 k9s로 포워딩하고 싶은 서비스를 강조표시하고 Shift-f를 누르기만 하면 된다. 저는 블록체인, 블록체인마이너, 블록체인노드를 8080, 8081, 8082로 설정했습니다. 이제 실행 중인 서비스를 Postman이나 Curl로 테스트해 볼 수 있습니다. ```js curl --location --request GET 'http://localhost:8081/user' \ --헤더 '인증: 기본 YWRtaW46YWRTaW4=' \ --header 'Content-Type: application/json' \ --data-raw '{ "name": "name2"}' ``` 그래서 우리는 도커 또는 도커 데스크톱(CI/CD용 도커 컨테이너 내부에 이미지를 만들 수 있기 때문에 편리함)의 도움 없이 모든 이미지를 구축했습니다. 우리는 공개적으로 제공되는 조타 장치 차트를 통해 외부 애플리케이션을 배포했고, 도커 구성을 번역했습니다."Yaml은 우리의 모든 서비스를 배치하는 새로운 헬름 차트에 진입했다. 모두 저희 개발자 노트북에서요. IDE에서 디버깅하는 작업은 간단합니다. 모든 종속성을 포트 포워딩하고 전달된 포트에서 읽도록 구성을 조정하기만 하면 됩니다. 모든 서비스를 제거하려면 helm uninstall 명령을 사용하십시오. ```js 조타 장치 제거 mongo -node1 조타 장치 제거 kafka -node1 조타 장치 제거 블록 체인 -node1 조타 장치 제거 블록 체인 마이너 -node1 조타 장치 제거 블록 체인 노드 -n 노드1 ...node2에 대한 검색 ``` 장황한 글을 읽어주셔서 감사드리며, 일상생활에서 응용할 수 있는 좋은 노하우를 뽑아내셨기를 바랍니다. 이 기사의 모든 코드는 여기에서 찾을 수 있습니다.
from http://top-poster.tistory.com/32 by ccl(A) rewrite - 2021-09-28 05:01:02