• 검색 결과가 없습니다.

5. 마이크로 서비스 배포

5.3 S PRING B OOT 애플리케이션 도커 이미지 변환

5.3.2 Dockerfile

5.2.2.4.3 서비스

서비스는 여러 도커 데몬에 걸쳐 컨테이너를 확장할 수 있게 해주며, 이 모든 것이 여러 managers 와 workers 와 함께 동작한다. 모든 데몬은 도커 API 를 사용하여 통신한다.

기본적으로 서비스는 모든 worker 노드에서 로드 밸런싱된다. 도커 서비스는 사용자에게는 단일 애플리케이션으로 보인다.

5.2.3 도커 설치

도커 엔진은 도커 Desktop 을 통해 다양한 Linux 플랫폼 , macOS 및 Windows 10 운영 체제에 설치할 수 있다.

각 운영 체제에 대한 설치 가이드는 아래의 공식 설치 가이드를 참조한다.

도커 Desktop 다운로드 및 설치 가이드 : https://docs.docker.com/engine/install/

5.3.2.1 FROM

FROM <이미지>

FROM <이미지>:<태그>

FROM 명령어는 새 빌드 단계를 초기화하고 후속 명령어를 위해 기본 이미지를 설정한다. 따라서 Dockerfile 은 FROM 명령어로 시작해야 한다. 다만 ARG 명령어는 첫번째 이전에 발생하는 모든 명령어에 의해 선언된 변수를 지원할 수 있으므로 FROM 명령어 이전에 올 수 있다.

# Ubuntu 이미지 설정 FROM ubuntu

# Java 설정 FROM java:8

5.3.2.2 LABEL

LABEL <키>=<값>…

LABEL 명령어는 이미지에 메타 데이터를 추가하는데 사용하며 키-값 쌍으로 구성된다.

LABEL 값 내에 공백을 포함하려면 따옴표와 백 슬래시를 사용한다.

LABEL "egovframework.msa.sample"="sample"

LABEL egovframework.msa.sample="sample"

LABEL version="1.0"

LABEL description="This text illustrates \ that label-values can span multiple lines."

5.3.2.3 VOLUME

VOLUME <경로>

VOLUME 명령어는 지정된 이름으로 마운트 지점을 만들고 기본 호스트 또는 다른 컨테이너에서 외부 마운트 된 볼륨을 보유하는 것으로 표시한다.

5.3.2.4 EXPOSE

EXPOSE <포트>

EXPOSE <포트>/<프로토콜>…

EXPOSE 명령어는 컨테이너가 런타임에 지정된 네트워크 포트에서 수신 대기한다는 것을 Docker 에 알려준다. 포트가 TCP 또는 UDP 에서 수신하는지 여부를 지정할 수 있으며 프로토콜이 지정되지 않은 경우 기본값은 TCP 이다.

# TCP 와 UDP 모두에서 노출할 경우 EXPOSE 80/tcp

EXPOSE 80/udp

5.3.2.5 ARG

ARG <이름>

ARG <이름>=<기본값>

ARG 명령어는 docker build 명령으로 이미지를 빌드 시, --build-arg 옵션을 통해 넘길 수 있는 인자를 정의하기 위해 사용한다. 사용자가 Dockerfile 에 정의되지 않은 빌드 인수를 지정하면 빌드가 경고를 출력한다.

예를 들어 jarfile 을 인자로 선언할 경우 아래처럼 두가지 방법으로 사용할 수 있다.

# 첫번째 방법 ARG jarfile

# 두번째 방법

ARG jarfile=test-0.0.1-SNAPSHOT.jar

첫번째 방법과 같이 선언하는 경우 도커 빌더 명령어에 --build-arg 옵션에 jarfile 값을 넘겨줄 수 있고 두번째 방법과 같이 기본값을 지정하여 사용할 수 있다.

$ docker build --build-arg jarfile=test-0.0.1-SNAPSHOT.jar

5.3.2.6 ADD/COPY

ADD [--chown=<user>:<group>] <src>…… <dest>

ADD [--chown=<user>:<group>] ["<src>"…… "<dest>"]

COPY [--chown=<user>:<group>] <src>…… <dest>

COPY [--chown=<user>:<group>] ["<src>"…… "<dest>"]

ADD/COPY 명령어는 새 파일, 디렉토리 또는 원격 파일 URL 을 복사하여 <desc>

경로에 있는 이미지의 파일 시스템에 추가할 때 사용한다.

ADD 명령어는 단순히 복사하는 기능을 하는 COPY 명령어와 달리 <src> 경로에 URL 을 입력하면 파일을 다운로드해서 추가하며, <src> 이 압축파일(gzip, bzip2 등)이면 압축을 해제한다. 로컬 파일을 도커 이미지로 복사하는 경우가 대부분이므로 가급적 COPY 명령어를 사용하도록 한다.

여러 <src> 리소스를 지정할 수 있지만 파일 또는 디렉터리인 경우 해당 경로는 빌드 컨텍스트의 소스에 대해 상대 경로로 해석되며, 각각 <src> 는 와일드 카드를 포함 할 수 있다.

# text.txt 추가 COPY text.txt /myDir/

# ‘sam’ 으로 시작하는 모든 파일 추가 COPY sam* /myDir/

# ‘sample.txt’ 와 같은 단일 문자열로 대체 ADD sampl?.txt /myDir/

# 추가된 컨텐츠의 소유권 지정

ADD –chown=my:group files* /myDir/

5.3.2.7 ENTRYPOINT

ENTRYPOINT ["<커맨드>", "<파라미터 1>", "<파라미터 2>"]

ENTRYPOINT <전체 커맨드>

ENTRYPOINT 명령어는 이미지를 컨테이너로 띄울 때 항상 실행되어야 하는 명령을 지정할 때 사용한다. 또한 ENTRYPOINT 명령어는 도커 이미지를 마치 하나의 실행 파일처럼 사용할 때 유용하다. 왜냐하면 컨테이너가 뜰 때 ENTRYPOINT 명령어로 지정된 명령이 실행되고, 이 명령으로 실행된 프로세스가 죽을 때 컨테이너도 같이 종료되기 때문이다.

# jar 파일을 실행

ENTRYPOINT ["java","-jar","catalog.jar"]

# apache 를 foreground 로 실행

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]