ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • DockerFile과 commit 명령어로 웹서버 이미지 만들기
    MSA & 쿠버네티스(Kubernetes) - k8s 2022. 8. 8. 00:01
    728x90

    우리는 Docker Hub이라는 Docker에서 운영하는 이미지 저장소에서 도커 이미지를 받아서 run 명령어를 통해 컨테이너로 실행합니다.

     

    만약 우리가 원하는 이미지를 생성하기 위해서는 어떻게 해야 할까요?

    1. 컨테이너를 실행하여 commit 명령어로 이미지로 만들 수 있습니다.

    2. 도커 파일을 생성하고 build 명령어로 이미지를 만들 수 있습니다.

    도커 파일

    이를 해석하자면 다음과 같습니다

    우분투 20.04 os 환경에서부터 (FROM ~)

    파이썬을 설치하고 (RUN~) : 도커 이미지가 생성되기 전에 수행할 쉘 명령어

    /var/www/html 경로를 생성하고 (WORKDIR~) : 설정한 실행 파일이 실행될 디렉터리

    index.html 파일을 해당 경로에 복사하고 (COPY~)

    EXPOSE : 호스트와 연결할 포트 번호

    http.server 모듈을 사용하여 웹서버를 시작한다. (ENTRYPOINT~) : docker run 실행 시, 무조건 실행되는 명령어

     

    commit과 build의 차이점

    commit은 백업과 같은 느낌이 강하지만 build는 우리가 원하는 시나리오대로 이미지를 생성하는 느낌입니다.

     

     

    Commit 명령어로 웹 서버 이미지 만들기

    docker run --name web-server -it ubuntu:20.04

    ubunto:20.04 이미지 파일을 web-server라는 이름의 컨테이너로 실행시킵니다.

     

    ubunto:20.04 이미지로 컨테이너 생성

     

    docker commit web-server web-server-commit

    docker commit [컨테이너 이름] [이미지 이름] 명령어를 활용해서 이미지를 만들 수 있습니다.

     

    docker images

    docker images 명령어를 통해 web-server-commit이라는 이미지가 생겼는지 확인합니다.

     

     

    사실 contrainer를 건드린 게 없기 때문에 ubuntu:20.04 이미지와 동일한 web-server-commit 이미지가 생겼습니다.

     

    해당 컨테이너에 python을 설치해보겠습니다.

    apt update
    
    apt install python3

     

    사용자의 요청을 응답해줄 경로를 설정합니다.

    mkdir -p /var/www/html
    
    cd /var/www/html

     

    index.html을 생성합니다.

    echo "Hello, <strong>Docker</string>" > index.html

     

    python 서버를 실행시킵니다.

    python3 -m http.server

     

    도커 파일로 웹 서버 이미지 만들기

    원하는 경로에 Dockerfile 생성

    echo "" >> Dockerfile

     

    저는 C:\Users\babab\Desktop 경로에서 Dockerfile을 만들었습니다.

     

    도커 파일을 수정하는 명령어를 입력합니다.

    notepad Dockerfile

     

    메모장이 켜집니다.

     

    그리고 Dokerfile에는 다음과 같이 입력합니다.

    FROM ubuntu:20.04
    RUN apt update && apt install -y python3
    WORKDIR /var/www/html
    COPY ["index.html", "."]
    CMD ["python3", "-m", "http.server"]

     

     

    각 줄의 의미는 다음과 같습니다

    우분투:20.04 이미지에

    apt update, apt install -y python3 명령어를 차례대로 수행하여 파이썬 3을 설치하고

    /var/www/html이 존재하지 않으면 만들어서 해당 경로로 이동하고

    host에 있는 index.html을 해당 경로로 복사하고

    python3 -m http.server 명령어를 실행하라는 의미입니다.

     


    RUN은 빌드가 되는 시점에 실행되는 명령어이고 CMD는 컨테이너가 실행될 때 실행되는 명령어입니다.

    RUN의 명령어는 이미지에 반영되고 CMD 명령어는 컨테이너에 반영됩니다.

     

     

    Dockerfile을 통해 이미지를 생성합니다.

    docker build -t web-server-build .

     

    docker built -t {이미지명}:{태그} {빌드 콘텍스트}

    dokcer images 명령어를 통해 이미지가 생성되었는지 확인합니다.

    이때 빌드 콘텍스트는 Dockerfile이 존재하는 경로로. 은 현재 경로를 의미합니다.

     

    이후에 만들어진 이미지를 실행해보겠습니다.

    docker run -p 8888:8000 --name web-server web-server-build

    web-server-build라는 이미지를 web-server라는 컨테이너로 실행하며 포트 포워딩은 8888 -> 8000으로 설정합니다.

    포트포워딩 방향은 host -> contianer 방향입니다.

     

    CMD 명령어를 자동으로 수행하고 싶지 않다면 run 명령어 뒤에 pwd를 붙이면 됩니다.

     

    이제 아래의 URL 주소로 들어가면 웹페이지를 볼 수 있습니다.

    http://localhost:8888/index.html

     

    Dockerfile의 장점

    이미지가 어떻게 만들어졌는지 기록할 수 있습니다.

    (문서화의 측면과 변경에 용이함)

     

    배포에 용이합니다.

    (몇기가씩 되는 이미지 파일 자체를 배포하기보다는 이미지를 만들 수 있는 스크립트를 배포하는것이 더 편리합니다)

     

     

     

     

    출처

    https://www.youtube.com/watch?v=0kQC19w0gTI 

    https://wooono.tistory.com/123

     

    [Docker] Dockerfile 개념 및 작성법

    Dockerfile Dockerfile은 DockerImage를 생성하기 위한 스크립트(설정파일)이다. 여러가지 명령어를 토대로 Dockerfile을 작성한 후 빌드하면 Docker는 Dockerfile에 나열된 명령문을 차례대로 수행하며 DockerIma..

    wooono.tistory.com

     

    댓글

Designed by Tistory.