4.docker-image
- image 생성이유 : application의 배송과 배포가 쉽도록 하기 위해
간단한 python flask application image 실습
- image 생성 - Dockerfile 작성
- OS Ubuntu
- Update apt repo
- Install dependencies using apt
- Copy source code to /opt folder
- 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을 만들더라
- dockerfile을 이용해 docker image 생성
docker build . -f Dockerfile -t <계정>/<tag=image이름>
- dockerfile의 각 line은 계층적으로 실행되기 때문에
docker history <image이름>
명령어를 통해 각 계층에서 저장공간을 얼마나 사용했는지 확인할 수 있음 - build 시 각 계층을 캐시에 저장하기 때문에 처음부터 다시 시작하지 않음
- docker hub에 image 올리기
docker login
docker push <계정>/<tag=image이름>
환경변수(environment variables)
- python 파일에 설졍되어 있는 변수
color = "red"
- color를 환경 변수로 설정
- python 파일 안 :
os.environ.get('APP_COLOR')
- 명령문 :
export APP_COLOR=blue; pyhthon app.py
- python 파일 안 :
- docker run에서 환경변수 설정 :
-e
docker run -e APP_COLOR=blue simple-webapp
CMD vs ENTRYPOINT
- CMD
- Dockerfile 내에서 명령어를 나타냄
CMD ["<명령문>, <변수>"]
,CMD <명령문> <변수>
CMD ["sleep", "10"]
,CMD ["bash"]
- CMD가 bash인 경우는 운영체제의 경우로 보통은 bash를 찾지 못하고 바로 프로세스가 종료되지만,
-t
를 이용하면 bash를 찾아 바로 종료되지 않는다.
- CMD가 bash인 경우는 운영체제의 경우로 보통은 bash를 찾지 못하고 바로 프로세스가 종료되지만,
- container는 내부의 process가 실행될 동안 살아있음
-
내부 process는 Dockerfile 내부의 CMD를 통해 확인할 수 있음
docker run ubuntu-sleeper sleep 10
- 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
이런 식으로 재정의 가능
- 합
ENTRYPOINT ["sleep"] CMD ["5"]
- 이렇게 하면
docker run ubuntu-sleeper 10
이렇게 인식함, 반대는 5 sleep이므로 무시
- 이렇게 하면