ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker 소개 -3
    Tech 2019. 3. 4. 22:44





    Docker 소개 -1

    Docker 소개 -2


    Docker란?

    도커는 서비스 운영 환경을 묶어서 손쉽게 배포하고 실행하는 경량 컨테이너 기술  


    Docker Image 란?

    Docker Images는 Layer 이루어져 있으며, 컨테이너 구동을 위한 Read Only Layer는 컨테이너들이 공유하며 자신의 독립적인 정보를 저장하는 Read Write Layer로 이루어져 있습니다.


    세번 째 포스팅은 두번 째 포스팅과 마찬가지로 간단한 도커 실습을 통해 도커의 이해를 좀 더 돕기 위한 글 입니다.


    작성한 java 파일을 빌드하고 실행하는 도커 이미지를 만들어보겠습니다. 아래 사진을 보면 제 컴퓨터 환경(vm)에는 *.class 파일을 빌드하고 실행할 수 있는 jdk, jre가 설치되어있지 않습니다. 





    Docker Image 생성하기 (Hello Docker)


    1. dockerfile 디렉토리 생성

    2. 

    - Hello Docker 출력하는 HelloDocker.java 파일 작성

    - HelloDocker.java를 build하고 실행하는 dockerfile 파일 작성

    3. dockerfile Build

    4. 생성한 이미지 파일 실행


    -dockerfile 디렉토리 생성-


    # mkdir dockerfile

    # cd dockerfile


    -dockerfile 파일 작성-

    - Hello Docker 출력하는 HelloDocker.java 파일 작성


    # vim HelloDocker.java

    1
    2
    3
    4
    5
    public class HelloDocker {
        public static void main(String[] args) {
            System.out.println("Hello Docker~~~\n\n\n");
        }
    }
    cs



    - HelloDocker.java를 build하고 실행하는 dockerfile 파일 작성


    gedit dockerfile

    1
    2
    3
    4
    5
    FROM java:8
    COPY . /home/user/hello
    WORKDIR /home/user/hello
    RUN javac HelloDocker.java
    CMD ["java","HelloDocker"]
    cs
    dd



    -dockerfile 파일 Build-

    # docker build --tag example .



    위 사진을 보면 docker build --tag example . 명령어를 통해 해당 디렉토리의 dockerfile을

    build 후 example 이미지가 생성되었습니다.



    -생성한 이미지 파일 실행-

    # docker run example




    Syntax


    FROM

    Base image를 지정하는 명령어로 지정된 Images를 Docker Hub와 같은 Registry에서 Pull합니다. Base image를 지정할때는 java:1.8 처럼 Image명과 버젼까지 지정해주는것이 좋습니다.


    RUN

    RUN 명령어는 Base Image위에 필요한 패키지를 설치할 때 사용하는 명령어입니다.. Run명령어가 수행된 이후에는 새로운 Layer가 Base이미지 위에 생성됩니다.


    CMD

    CMD 명령어는 Docker Container가 시작할때 실행 할 커맨드를 지정하는 지시자이며 주용도는 컨테이너 실핼 할 때 default 명령어를 설정하는 것입니다. docker run 실행 시 실행할 커멘드를 주지 않으면 CMD로 지정한 default명령이 실행됩니다.


    EXPOSE

    EXPOSE 명령은 Container가 Runtime시 수신대기할 포트를 지정하는 명령어입니다. 주의해야 할 점은 EXPOSE명령어 자체가 실제로 포트를 열지 않는다는 점 입니다. EXPOSE명령은 이미지를 만드는 사람과 이미지를 사용하는 사람이 포트 및 프로토콜을 명시해놓는 문서정의 입니다. 실제 Container의 포트는 docker run -p 옵션으로 지정된 포트가 개방됩니다.


    ENV

    ENV명령어는 환경변수 <key>, <value> 쌍으로 설정하는 명령어 입니다. 쉽게 일반 프로그래밍 변수를 지정하는 것과 동일합니다.


    COPY

    호스트의 Context내의 파일 또는 디렉토리들을 Container의 파일시스템으로 복사하는 명령어입니다.

    --chown 옵션으로 파일 및 디렉토리의 대한 유저와 그룹을 지정 할 수 있습니다.


    WORKDIR

    WORKDIR명령어는 작업디렉토리를 지정하는 명령어입니다. 쉽게 말해 리눅스 cd 명령어와 비슷하다고 생각하면 됩니다.


    VOLUME
    VOLUME명령어는 컨테이너에서 생성된 데이터를 영구보존하고자 할 때 사용되는 명령어로 컨테이너가 실행될 때
    Volume 명령어로 선언된 Container안의 지점을 Container 밖의 특정지점과 자동으로 마운트되어 컨테이너가 실행됩니다.


    컨테이너 밖에 자동으로 마운트되는 Volume name은 해쉬값으로 생성됩니다.


    정리


    HelloDocker.java파일을 실행하는 도커 이미지를 작성 및 빌드 후 실행해보면서 도커에 이미지에 대한 이해를 할 수 있었습니다. 다음 포스팅은 Docker Network에 대해 작성하겠습니다.




    'Tech' 카테고리의 다른 글

    GraphQL 소개  (0) 2019.03.12
    HTTPS 란?  (0) 2019.03.04
    Docker 소개 -2  (2) 2019.03.03
    Docker 소개 -1  (1) 2019.03.03

    댓글

Designed by Tistory.