Skip to content

[feature]: 컨테이너 이미지를 Kubernetes 환경에서 관리 #5

@downfa11

Description

@downfa11

Docker API with Spring Boot

docker java client와 docker engine 이용


왜 Local 환경에서 컨테이너 이미지를 만들고, AWS ECR로 Push하는 전략을 구상했는가?

  • AWS CodeBuilder를 이용하면 편하겠지만 비용적인 측면에서 부담된다.

https://hkemon.medium.com/docker-api-with-spring-boot-5c3d644fe8cd


Unsupported protocol scheme: npipe:////./pipe/docker_engine 오류

Windows 환경에서 DocekrClient가 native 파이프(npip) 프로토콜을 사용해서 Docker Daemon에 접근하는 경우 생기는 오류이다.

docker-java 라이브러리는 Windows npip를 지원하므로 DOCKER_HOST 환경 변수를 설정하지 않고 기본값으로 사용한다.

  1. 환경변수 DOCKER_HOST 확인하기

    set DOCKER_HOST=npipe://./pipe/docker_engine
    or set DOCKER_HOST=tcp://localhost:2375

    환경설정의 문제는 아닌거 같다. WSL2에서 해당 환경 변수를 설정해줘서 똑같이 오류가 뜬다..

  2. Windows 10 docker 버전에서 발생하는 DockerClient 초기화 오류이다.

    접속을 못하는건데, ver 2.0.0.3(31259) 이상에서 다음과 같이 해결할 수 있다.

    • Docker Desktop Setting - General - Expose daemon on tcp://localhost:2375 without TLS 설정
      • legacy clients connect to the daemon. it also makes yourself vulnerable to remote code execution attacks.
  3. Configuration에서 DefaultDockerClientConfig를 설정해주자.

            DefaultDockerClientConfig config = DefaultDockerClientConfig.createDefaultConfigBuilder()
                    .withDockerHost("tcp://localhost:2375")
                    .withDockerTlsVerify(false)
                    .build();




각고의 노력 끝에 성공했다. 역시 기도가 부족했던 탓이다.

        return DockerClientBuilder.getInstance(config)
                .withDockerHttpClient(new OkDockerHttpClient.Builder()
                        .dockerHost(config.getDockerHost())
                        .build())
                .build();
    }

DockerHttpClient를 명시적으로 표시하지 않아서 클래스 로드 오류가 났던 것으로, OkDockerHttpClient를 Builder를 통해 생성해주니 잘 접속된다.


테스트를 위해 Dockerfile이 존재하는 애플리케이션의 레포지토리가 필요했고, 예전에 작업하던 프로젝트를 잠깐 가져왔다.

https://github.com/downfa11/market-service

먼저 JGit 라이브러리를 이용해서 Git Clone을 진행해서 파일을 가져온 뒤, Docker Image 빌드 후 디렉토리 내의 프로젝트들을 삭제하는 프로세스이다.


스크린샷 2024-12-16 220258


접속한 김에 현재 로컬 Docker Daemon에 있는 이미지 목록도 출력했는데 market-service가 제대로 빌드된 것을 확인할 수 있다.

스크린샷 2024-12-16 220320

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions