본 글은 도커 교과서를 읽고 정리한 내용입니다.
애플리케이션을 패키징할 때 필요한 일이 있는데 바로 Dockerfile 스크립트 안에서 명령을 실행하는 것.
이번 장에선 소스 코드로부터 애플리케이션을 패키징하는 방법을 알아볼 예정.
빌드 툴체인을 한번에 패키징해서 공유할 수 있다면 매우 편리함.
개발에 필요한 모든 도구를 배포하는 Dockerfile 스크립트를 작성한 다음 이를 이미지로 만들고 애플리케이션 패키징을 위한 Dockerfile 스크립트에서 이 이미지를 사용해 소스 코드를 컴파일함으로써 애플케이션을 패키징하면 됨.
FROM diamol/base AS build-stage
RUN echo 'Buiding...' > /build.txt
FROM diamol/base AS test-stage
COPY --from=build-stage /build.txt /build.txt
RUN echo 'Testing...' >> /build.txt
FROM diamol/base
COPY --from=test-stage /build.txt /build.txt
CMD cat /build.txt
위 스크립트는 빌드가 여러 단계로 나뉘는 멀티 스테이지 빌드를 적용한 것.
빌드가 여러 단계로 나뉘어 있지만, 최종 산출물은 마지막 단계의 내용물을 담은 도커 이미지이다.
각 빌드 단계는 독립적으로 실행되지만, 앞선 단계에서 만들어진 디렉토리나 파일을 복사할 수 있음.
위 스크립트를 보아도, COPY에 --from인자 사용해 해당 파일이 호스트 컴퓨터의 파일 시스템이 아니라 앞선 빌드 단계의 파일 시스템에 있는 파일임을 알려줌.
RUN 인스트럭션은 빌드 중 컨테이너 안에서 명령을 실행한 다음 그 결과를 이미지 레이어에 저장하는 기능을 함.
RUN 인스트럭션을 실행할 수 있는 명령엔 제한이 없지만, FROM 인스트럭션에서 지정한 이미지에서 실행할 수 있는 것이어야 함.
위 Dockerfile을 따라 멀티 스테이지 빌드가 이뤄지는 과정은 다음과 같다.

각 빌드 단계는 서로 격리돼 있다! 즉 , 빌드 단계별로 기반 이미지도 다를 수 있기에 사용할 수 있는 도구도 다르다.
마지막 빌드 단계의 산출물은 이전 빌드 단계에서 명시적으로 복사해 온 것만 포함할 수 있으며, 어느 한 단계에서 명령이 실패하면 전체 빌드가 실패한다.
컨테이너는 컨테이너가 실행될 때 부여되는 가상 네트워크 내 가상 IP를 통해 서로 통신한다. 이 가상 네트워크 역시 명령행 인터페이스를 통해 관리할 수 있다.
아래 명령어를 통해 컨테이너 간 통신에 사용되는 도커 네트워크를 생성할 수 있다.
docker network create nat
컨테이너를 실행할 때 --network 옵션을 사용하면 새로 만들 컨테이너를 연결할 네트워크를 직접 지정할 수 있으며, 같은 네트워크 안에 속한 컨테이너 간에는 서로 자유롭게 통신이 가능함!
본 글은 도커 교과서를 읽고 정리한 내용입니다.
애플리케이션을 패키징할 때 필요한 일이 있는데 바로 Dockerfile 스크립트 안에서 명령을 실행하는 것.
이번 장에선 소스 코드로부터 애플리케이션을 패키징하는 방법을 알아볼 예정.
빌드 툴체인을 한번에 패키징해서 공유할 수 있다면 매우 편리함.
개발에 필요한 모든 도구를 배포하는 Dockerfile 스크립트를 작성한 다음 이를 이미지로 만들고 애플리케이션 패키징을 위한 Dockerfile 스크립트에서 이 이미지를 사용해 소스 코드를 컴파일함으로써 애플케이션을 패키징하면 됨.
FROM diamol/base AS build-stage
RUN echo 'Buiding...' > /build.txt
FROM diamol/base AS test-stage
COPY --from=build-stage /build.txt /build.txt
RUN echo 'Testing...' >> /build.txt
FROM diamol/base
COPY --from=test-stage /build.txt /build.txt
CMD cat /build.txt
위 스크립트는 빌드가 여러 단계로 나뉘는 멀티 스테이지 빌드를 적용한 것.
빌드가 여러 단계로 나뉘어 있지만, 최종 산출물은 마지막 단계의 내용물을 담은 도커 이미지이다.
각 빌드 단계는 독립적으로 실행되지만, 앞선 단계에서 만들어진 디렉토리나 파일을 복사할 수 있음.
위 스크립트를 보아도, COPY에 --from인자 사용해 해당 파일이 호스트 컴퓨터의 파일 시스템이 아니라 앞선 빌드 단계의 파일 시스템에 있는 파일임을 알려줌.
RUN 인스트럭션은 빌드 중 컨테이너 안에서 명령을 실행한 다음 그 결과를 이미지 레이어에 저장하는 기능을 함.
RUN 인스트럭션을 실행할 수 있는 명령엔 제한이 없지만, FROM 인스트럭션에서 지정한 이미지에서 실행할 수 있는 것이어야 함.
위 Dockerfile을 따라 멀티 스테이지 빌드가 이뤄지는 과정은 다음과 같다.

각 빌드 단계는 서로 격리돼 있다! 즉 , 빌드 단계별로 기반 이미지도 다를 수 있기에 사용할 수 있는 도구도 다르다.
마지막 빌드 단계의 산출물은 이전 빌드 단계에서 명시적으로 복사해 온 것만 포함할 수 있으며, 어느 한 단계에서 명령이 실패하면 전체 빌드가 실패한다.
컨테이너는 컨테이너가 실행될 때 부여되는 가상 네트워크 내 가상 IP를 통해 서로 통신한다. 이 가상 네트워크 역시 명령행 인터페이스를 통해 관리할 수 있다.
아래 명령어를 통해 컨테이너 간 통신에 사용되는 도커 네트워크를 생성할 수 있다.
docker network create nat
컨테이너를 실행할 때 --network 옵션을 사용하면 새로 만들 컨테이너를 연결할 네트워크를 직접 지정할 수 있으며, 같은 네트워크 안에 속한 컨테이너 간에는 서로 자유롭게 통신이 가능함!