컨테이너(Container)
독립된 공간에서 실행중인 애플리케이션 프로세스라고 합니다. 즉, 애플리케이션(실행파일)과 운영환경이 모두 들어있는 독립된 공간이라고 생각하면 됩니다.
컨테이너 만드는 법 (Docker File)
컨테이너를 만들기 위해서는 도커파일로 제작을 해야합니다. 컨테이너 이미지를 생성할 수 있는 고유의 지시어를 가집니다. 대소문자 구분하지 않으나 가독성을 위해 사용합니다.
Docker file 문법
FROM: 컨테이너의 BASE IMAGE 운영환경
LABEL 컨테이너 이미지에 컨테이너의 정보를 저장
RUN 컨테이너 빌드를 위해 base image에서 실행할 commands
COPY 컨테이너 빌드시 호스트의 파일을 컨테이너로 복사
ADD 컨테이너 빌드시 호스트의 파일(tar, url)을 컨테이너로 복사
WORKDIR 컨테이너 빌드시 명령이 실행될 작업 디렉토리 설정
ENV 환경변수 지정
USER 명령 및 컨테이너 실행시 적용할 유저 설정
VOLUME 파일 또는 디렉토리를 컨테이너의 디렉토리로 마운트
EXPOSE 컨테이너 동작 시 외부에서 사용할 포트 지정
CMD 컨테이너 동작 시 자동으로 실행할 서비스나 스크립트 지정
ENTRYPOINT CMD와 함께 사용하면서 command 지정 시 사용
간단한 flask 컨테이너 만들기
mkdir makeflask
cd makeflask
mkdir app
cd app
vim requirements.txt
Flask==0.12
gunicorn==20.0.4
vim runflasks.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, world!'
if __name__ == '__main__':
app.run(debug=True,host='0.0.0.0')
#app 폴더에서 나옵니다.
cd ..
vim Dockerfile
FROM python:3.9
COPY . /app
WORKDIR /app
RUN pip install --upgrade pip
RUN pip install -r app/requirements.txt
CMD ["python","app/runflasks.py"]
# Docker file을 docker build를 통해 이미지화
docker build -t 원하는이름:version
:version 없으면 기본적으로 latest버전으로 설정됩니다.
docker build -t flasktest:v1 .
docker run -d -p 5000:5000 --name myfirstFlask flasktest:v1
Docker file에서 FROM은 사용할 base image입니다. 쉽게말해 파이썬 파일을 실행 시킬 파이썬 버전을 사용하는 것입니다.
COPY 현재 디렉토리(.)의 app 디렉토리를 복사합니다. app 폴더 내부는 requirements.txt, runflask.py파일들이 있습니다.
WORKDIR는 ./app디렉토리를 복사했으니 컨테이너 작업위치를 /app로 설정했습니다.
RUN은 이미지에 있는 프로젝트에 필요한 패키지 및 shell 명령어로 실행시켜 줄 수 있습니다. 설치가 많다면 requirement.txt로 설정해서 해주는게 좋습니다.
docker run -d -p --name 이미지 이름
-p: ---> port를 설정해주는 옵션
--name ---> 컨테이너의 이름을 설정해주는 옵션
-d ---> run 동작을 백그라운드에서 진행하도록 해주는 옵션
docker run -d -p 5000:5000 --name myfirstFlask flasktest:v1
저는 run했을 때 백그라운드로 실행해주고 포트는 5000(외부):5000(내부)로 접근해주도록 설정했고 이름은 myfirstFalsk로 설정해주었습니다.
실행중인 컨테이너 확인
docker ps
컨테이너 로그 확인하기
docker logs 컨테이너이름/컨테이너 아이디
log 계속확인하고 싶으면 -f옵션을 주면 실시간으로 log확인 가능합니다.
docker logs -f 컨테이너이름/컨테이너 아이디
ctrl+c 누르면 실시간 로그가 중단됩니다.
'Docker' 카테고리의 다른 글
컨테이너(Container) (0) | 2022.12.01 |
---|---|
Docker - 모든 image와 container삭제하기 (0) | 2021.12.09 |
Docker- wsl2에서 ubuntu:20.04 LTS 환경 system clock과 현재시각(timezone) 때문에 나타나는 에러 해결법 (0) | 2021.12.09 |
Docker - container and image (0) | 2021.11.10 |
Docker 특징 (0) | 2021.11.09 |
댓글