Docker/compose

bootJar to Dockerize(jar 이미지화) : 포트 바인딩, ARG, EXPOSE ...

PSAwesome 2020. 6. 21. 19:31
반응형

안녕하세요.

이번 글은 jar 파일을 컨테이너화 하는 작업에서 겪고 확인한 내용입니다.

  • Dockerfile EXPOSE : docker-comopse ports
    • 도커 파일에서 정의한 EXPOSE 와 compose 에 정의한 ports
  • Dockerfile ARG
    • ARG를 쓸 수 없는 구간 (해결점을 찾진 못했습니다.)
  • compose networks
    • 컴포즈에 networks에 묶었다 하더라도 ports 바인딩을 해야한다.

 

 

1. Dockerfile EXPOSE

도커 파일에 EXPOSE 에 8080을 추가했다 하더라도

compose 에 ports 설정을 하지 않으면 호스트, 동일 네트워크 컨테이너와 통신하지 못했다.

 

어떤 글에서 EXPOSE 설정하면 된다고 해서 ports 제거하고 헤맸습니다...

제가 작성한 도커파일입니다.

 


COMPOSE 에서 호스트와 포트 바인딩을 위해선 

ports 리스트에 추가

하기


그리고 쌍 따옴표로 감싸기


 


2. Dockerfile ARG

위에서 확인 가능한 ARG에 선언하고 저 변수를 

쌍 따옴표를 쓰지 않고는 사용이 가능했지만, 


ENTRYPOINT 배열 안에선 제대로 파싱되지 못한다.


error ex)

ENTRYPOINT [ "java", "-jar", "${ENV}", "/app-server.jar" ]

 

3. networks

해당 app을 묶을 때 create network 명령어로 네트워크 생성 후 엮은 상태


ports 를 호스트와 바인딩 하지 않으니 서로 통신하지 못했습니다.


도커에 대한 지식이 부족하여 아래 두 yaml 파일을 완성하는데 시간이 너무 오래 걸렸네요.

RSocket - server

version: '3.7'

services:
  ps_rsocket_server:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        JAR_FILE: build/libs/*.jar
    container_name: rsocket-server
    hostname: localhost
    image: psawesome/rsocket-server
    ports:
      - "7000:7000"
    networks:
      - ps_rsocket_posts

networks:
  ps_rsocket_posts:
    driver: bridge
    internal: true
    external: true

 

RSocket - client

version: '3.7'

services:
  ps_rsocket_client:
    build:
      context: ./rsocket-crud-client
      dockerfile: Dockerfile
      args:
        JAR_FILE: build/libs/*.jar

    image: psawesome/rsocket-client
    container_name: rsocket-client
    hostname: localhost
    ports:
      - "8080:8080"

    networks:
      - ps_rsocket_posts

networks:
  ps_rsocket_posts:
    driver: bridge
    internal: true
    external: true

 

게다가 아직 컨테이너 이름과 호스트 네임이 헷갈리는데요..

client 연결 실패를 해소하기 위해 Profiles까지 추가하며 해소하였습니다만 근본적인 내용을 파헤치진 못했습니다.

위 yaml 설정에서 hostname, container_name 이 다르다는 것을 확인할 수 있습니다.

제 의도는 hostname을 못찾길래 명시해서 prod 환경에서도 localhost로 찾아가라는 의도였지만

실제 반영된 내용은 container_name으로 연결되었다는 점입니다.

 

 

컨테이너화가 어렵지 않을 것으로 생각했지만 아직 갈길이 머네요.

 

그 밖에도 Context를 지정하면 그 위치에 있는 도커 파일을 찾아 빌드하는 것과

compose arg 리스트로 Dockerfile에 파라미터를 전달하는 것을 인지하였습니다.

 

마무리까지 즐거운 작업이었습니다.

 

감사합니다!

반응형

'Docker > compose' 카테고리의 다른 글

docker compose 간 network 공유  (0) 2021.01.23
docker-compose Device or resource busy  (0) 2021.01.15
Docker-compose.yml 작성  (0) 2020.01.04