• image 생성이유 : application의 배송과 배포가 쉽도록 하기 위해

간단한 python flask application image 실습

  1. image 생성 - Dockerfile 작성
    1. OS Ubuntu
    2. Update apt repo
    3. Install dependencies using apt
    4. Copy source code to /opt folder
    5. Run the web server using “flask command
# <명령어> <argument>
From Ubuntu # 모든 docker image는 또 다른 image에 기반을 둠

RUN apt-get update && apt-get -y install python

RUN pip install flask flask-mysql

COPY  . /opt/source-code #로컬시스템의 파일을 복사해감

ENTRYPOINT FLASK_APP=/opt/source-code/app.py flask run #image가 container로 실행될 때 작동할 명령어

  • ubuntu contianer 안에서 수동으로 application을 실행 한 후에 history를 사용해 과정을 차례대로 복붙하며 dokcerfile을 만들더라
  1. dockerfile을 이용해 docker image 생성
    • docker build . -f Dockerfile -t <계정>/<tag=image이름>
    • dockerfile의 각 line은 계층적으로 실행되기 때문에 docker history <image이름> 명령어를 통해 각 계층에서 저장공간을 얼마나 사용했는지 확인할 수 있음
    • build 시 각 계층을 캐시에 저장하기 때문에 처음부터 다시 시작하지 않음
  2. docker hub에 image 올리기
    • docker login
    • docker push <계정>/<tag=image이름>

환경변수(environment variables)

  1. python 파일에 설졍되어 있는 변수
    • color = "red"
  2. color를 환경 변수로 설정
    • python 파일 안 : os.environ.get('APP_COLOR')
    • 명령문 : export APP_COLOR=blue; pyhthon app.py
  3. docker run에서 환경변수 설정 : -e
    • docker run -e APP_COLOR=blue simple-webapp

CMD vs ENTRYPOINT

  1. CMD
    • Dockerfile 내에서 명령어를 나타냄
    • CMD ["<명령문>, <변수>"], CMD <명령문> <변수>
    • CMD ["sleep", "10"], CMD ["bash"]
      • CMD가 bash인 경우는 운영체제의 경우로 보통은 bash를 찾지 못하고 바로 프로세스가 종료되지만, -t를 이용하면 bash를 찾아 바로 종료되지 않는다.
    • container는 내부의 process가 실행될 동안 살아있음
    • 내부 process는 Dockerfile 내부의 CMD를 통해 확인할 수 있음

    • docker run ubuntu-sleeper sleep 10
  2. ENTRYPOINT
    • ENTRYPOINT ["sleep"]
    • CMD와 비슷한 명령어
    • container가 시작될 때 실행할 프로그램을 지정할 수 있음
    • 따라서 CLI에서 매개변수만 적어주면 됨
    • docker run ubuntu-sleeper 10
    • docker run ubuntu-sleeper이렇게만 쓰면 docker run ubuntu-sleeper sleep으로 인식, 매개변수가 없어 명령 실행 안됨.
    • runtime 도중에는 docker run --entrypoint sleep2.0 ubuntu-sleeper 10 이런 식으로 재정의 가능
  3. ENTRYPOINT ["sleep"]
    CMD ["5"] 
    
    • 이렇게 하면 docker run ubuntu-sleeper 10 이렇게 인식함, 반대는 5 sleep이므로 무시