Blog Content

    티스토리 뷰

    [Docker] 3. 컨테이너 이미지 만들기

    https://www.katacoda.com/courses/docker 사이트에서 학습 후 정리한 내용입니다.


    컨테이너 이미지 만들기


    Docker Image

    Docker Image는 Dockerfile을 기반으로 작성된다.

    Dockerfile은 응용 프로그램을 구성하고 컨테이너로 실행할 준비가 된 Docker 이미지를 만드는 데 필요한 모든 단계를 정의한다.


    1. Base Images

    모든 Docker 이미지는 Base Image로부터 시작된다.

    Base Image는 컨테이너를 시작하는데 사용되는 Docker 레지스트리의 이미지와 동일하다.

    이미지 이름과 함께 이미지 태그를 포함시켜 원하는 특정 버전을 표시할 수 있다.


    이러한 Base Image는 어플리케이션을 실행하기 위한 추가 변경 사항의 기초로 사용된다.

    이 샘플에서는 정적 HTML파일을 배포하기 전에

    시스템에서 NGINX를 구성하고 실행해야 한다.

    따라서 여기에서는 Base Image로 NGINX를 사용하고자 한다.


    Dockerfile은 각 행에 명령이 있는 간단한 텍스트 파일이다.

    기본 이미지를 정의하기 위해서는 다음과 같이 사용한다.

    FROM <image-name>:<tag>



    Dockerfile 만들기

    Dockerfile 내에 다음과 같이 작성한다.

    FROM nginx:1.11-alpine


    주의

    tag에 latest를 사용하면 예상치 못한 버전에 맞춰 이미지가 생성될 수 있다.

    항상 특정 버전의 번호를 tag로 사용하고, 직접 업데이트하여 관리하는 것이 좋다.


    2. 명령 실행하기 (Running Commands)

    Base Image가 정의되면 이미지를 구성하기 위해 다양한 명령들을 실행해야 한다.

    주요 command는 COPY, RUN 이 있다.


    RUN <command> : 명령 프롬프트에서처럼 다른 어플리케이션 패키지를 설치하거나, 빌드 명령을 실행하는 것 처럼 모든 명령을 실행할 수 있다.

    RUN의 결과는 이미지에 유지되므로 디스크에 불필요한 파일이나 임시 파일을 남기지 않는 것이 중요하다.

    COPY <src> <dest> : Dockerfile이 포함된 디렉토리의 파일을 컨테이너의 이미지로 복사할 수 있다.

    이는 컨테이너 내부에 배포하려는 소스코드 및 자산에 매우 유용하다.


    3. Exposing Ports

    명령어 : EXPOSE <port>

    Docker에 어떤 port를 오픈할 것인지 알려준다.

    다음과 같이 여러 port를 정의할 수도 있다.

    EXPOSE 80 433 or EXPOSE 7000-8000


    port 80으로 웹서버에 접근하길 원한다고 가정하고 

    Dockerfile에 다음과 같이 작성한다.

    EXPOSE 80


    4. Default Commands

    이제 어플리케이션을 실행하기 위해 명령어를 정의해보자.

    Dockerfile의 CMD 행은 컨테이너가 시작될 때 실행될 기본 명령을 정의한다.

    명령에 인수가 필요할 경우에는 배열을 사용한다

    ex : ["cmd", "-a", "arga value", "-b", "argb-value"]

    이것은 다음과 같은 명령어로 실행될 것이다.

    cmd -a "arga value" -b argb-value


    NGINX를 실행하는 명령은 다음과 같다.

    nginx -g daemon off

    Dockerfile내에 작성하자.


    CMD에 대한 또 다른 접근법은 ENTRYPOINT이다.

    컨테이너가 시작될 때 CMD를 재정의할 수 있지만

    ENTRYPOINT는 컨테이너가 시작될 때

    인수를 전달할 수 있는 명령을 정의한다.

    이 샘플에서 NGINX는 -g demon이 꺼진 상태로 진입된다.


    5. Building Containers

    이미지를 빌드하기 위한 명령어는 다음과 같다.

    docker build .

    -t <name> 옵션을 사용하여 이미지의 원하는 이름을 지정할 수도 있다.


    docker image 명령어를 통해 로컬 머신의 이미지 리스트를 확인할 수 있다.


    6. Launching New Image

    이미지가 성공적으로 만들어지면, 다음 명령어로 컨테이너를 시작할 수 있다.


    docker run -d -p 80:80 webserver-image:v1


    이제 docker라는 호스트이름의 웹 서버에 접근할 수 있다.

    컨테이너를 시작한 후에 다음 명령어

    curl -i http://docker 를 실행하면

    우리가 빌드한 NGINX와 이미지로 인해 index file을 리턴받을 수 있다.


    컨테이너가 실행중인지 확인하려면

    docker ps 




    Comments