728x90
반응형

도커파일(Dockerfile)이란 사용자가 도커 이미지를 쉽게 만들 수 있도록 도와주는 템플릿입니다.

 

기본 명령어

FROM -> Dockerfile이 어떤 이미지를 base image로 사용할 것인지 명시해줌

# FROM <image>[:<tag>] [AS <name>]

# EX)
FROM ubuntu
FROM ubuntu:18.04
FROM nginx:latest AS ngx

 

COPY -> <src>의 파일, 디렉토리를 <dest> 경로에 복사

# COPY <src>... <dest>

# EX)
COPY 1.txt /test/1.txt
COPY my-dir /test-dir

 

RUN -> 명시한 커맨드를 도커 컨테이너에서 실행

# RUN <command>

# EX)
RUN pip install numpy
RUN pip install -r requirements.txt

 

CMD -> 명시한 커맨드를 도커 컨테이너가 시작될 때 실행

하나의 도커 이미지에서 하나의 CMD만 실행 가능하다.

# CMD <command>

# EX)
CMD python main.py

 

WORKDIR -> 이후 작성될 명령어를 컨테이너 내의 어떤 디렉토리에서 수행할 것인지를 명시해줌

# WORKDIR /path/to/workdir

# EX)
WORKDIR /home/test

 

ENV -> 컨테이너 내부에서 지속적으로 사용될 환경 변수의 값을 설정

# ENV <key> <value>
# ENV <key>=<value>

# EX)
ENV LANG ko_KR.UTF-8
ENV LC_ALL ko_KR.UTF-8

 

EXPOSE -> 컨테이너에서 뚫어줄 포트/프토로콜을 지정

프로토콜을 지정하지 않으면 TCP가 디폴트로 설정됩니다.

# EXPOSE <port>
# EXPOSE <port>/<protocol>

# EX)
EXPOSE 8080

 

Dockerfile 작성 예시

# base image를 ubuntu 최신 버전으로 설정
FROM ubuntu:latest

#  apt-get update 명령어 실행
RUN apt-get update

# 도커 컨테이너가 시작될 때, "Hello World!" 출력
CMD ["echo", "Hello World!"]

위와 같이 Dockefile을 생성한 후 아래 명령어를 실행해주면 도커 이미지가 생성됩니다.

docker build -t test-image:v1.0.0 .

설명하자면 이름이 my-image고 태그가 v1.0.0인 이미지를 현재 경로에 있는 Dockerfile로부터

빌드하겠다는 명령어입니다. 

 

이미지가 생성되고 나서 아래 명령어를 통해 도커 컨테이너를 실행하면

Hello World!가 출력되는 것을 확인할 수 있습니다.

docker run test-image:v1.0.0

728x90
반응형

'MLOps' 카테고리의 다른 글

도커(Docker) 설치, 명령어  (0) 2021.11.18
MLOps란?  (0) 2021.11.16
GCP 인스턴스, 스토리지 버킷 생성하기(ssh 접속, gsutil, 권한 설정)  (0) 2021.06.08
728x90
반응형

오늘은 MLOps 공부 그 첫 번째 도커에 대해 간단히 알아보도록 하겠습니다.

우선 도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는

오픈 소스 프로젝트입니다. 사용해보시면 느낌이 확 오는데 가상 머신에 비해 배포하는 것이 너무 편합니다.

 

도커 설치

도커를 리눅스 환경에 설치하는 방법은 아주 간단합니다. 

sudo wget -qO- http://get.docker.com/ | sh

 위 명령어를 실행하면 바로 설치가 됩니다. 설치 후 아래 명령어를 실행시켰을 때 아래 이미지처럼 출력되면 끝입니다.

sudo docker run hello-world

 

명령어

docker run -> 도커 컨테이너를 실행

많은 옵션들이 있는데 아래 명령어로 예시를 들자면 

docker run -it --name test ubuntu:latest

-it -> 컨테이너를 실행시키는 동시에 interactive 한 터미널로 접속

--name -> 컨테이너 id는 알아보기가 어렵기에 구분하기 쉽도록 이름을 지정

-it 옵션을 붙였기에 명령어 실행 후 새로운 터미널에 접속된 것을 확인할 수 있습니다.

컨테이너의 이름이 test1인 것을 확인할 수 있습니다.

 

docker images -> 도커 이미지 리스트를 출력

위에서 도커가 설치됐는지 확인할 때 생성한 hello-world 이미지와

docker run 명령어 예시를 들 때 생성한 ubuntu 이미지가 출력되는 것을 확인할 수 있습니다.

 

docker ps -> 실행 중인 도커 컨테이너 리스트를 출력

확인을 위해 아래 명령어를 실행시키고 나서 docker ps 명령어를 실행하면 

docker run -it -d --name test1 ubuntu:latest

docker run 명령어에서 -d 옵션은 백그라운드에서 컨테이너가 계속 실행되도록 해준다.

test1 컨테이너가 출력되는 것을 확인할 수 있습니다.

옵션으로 -a를 넣고 실행하면 실행되었던 컨테이너까지 출력이 됩니다. 

 

docker stop -> 실행 중인 도커 컨테이너를 중단

docker stop [컨테이너 id]와 같은 방식으로 사용하는데 id는 다 칠 필요 없고 겹치는 숫자가 없을 때까지만

입력해주면 됩니다. 예를 들어 1234, 1289 2개의 컨테이너가 있다면 123 까지만 처도 1234 컨테이너가 중단됩니다. 

 

docker rm -> 도커 컨테이너를 삭제

test, test1 컨테이너를 중단하니 docker ps, docker ps -a 명령어에서 출력되지 않는 것을 확인할 수 있습니다.

 

docker rmi -> 도커 이미지 삭제

ubuntu 이미지가 삭제된 것을 확인할 수 있습니다.

 

만약 아래와 같은 에러가 뜬다면

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/json": dial unix /var/run/docker.sock: connect: permission denied

아래 명령어를 실행시키시면 됩니다. 저는 이걸로 해결됐습니다.

sudo chmod 666 /var/run/docker.sock

 

728x90
반응형

'MLOps' 카테고리의 다른 글

도커파일(Dockerfile) 작성  (0) 2021.11.21
MLOps란?  (0) 2021.11.16
GCP 인스턴스, 스토리지 버킷 생성하기(ssh 접속, gsutil, 권한 설정)  (0) 2021.06.08
728x90
반응형

MLOps는 머신러닝 시스템 개발과 시스템 운영을 통합하는 것을 목표로 하는 머신러닝 엔지니어링 방식입니다.

머신러닝 모델을 안정적이고 효율적으로 배포 및 유지하는 것을 목표로 한다고 보시면 될 것 같습니다.

 

MLOps의 구성 요소로는 크게 데이터, 모델, 서빙 3가지로 나눌 수 있는데

아래와 같이 아주 많은 플랫폼, 오픈 소스들이 존재합니다. 

데이터

  • 데이터 수집 파이프라인(ETL Pipeline) -> Sqoop, Flume, Kafka, Flink, Spark Streaming, Airflow
  • 데이터 저장 -> MySQL, Hadoop, Amazon S3, MinIO
  • 데이터 관리 -> TFDV, DVC, Feast, Amundsen

모델

  • 모델 개발 -> Jupyter Hub, Docker, Kubeflow, Optuna, Ray, katib
  • 모델 버전 관리 -> Git, MLflow, Github Action, Jenkins
  • 모델 학습 스케즐링 관리 -> Grafana, Kubernetes

서빙

  • 모델 패키징 -> Docker, Flask, FastAPI, BentoML, Kubeflow, TFServing, seldon-core
  • 서빙 모니터링 -> Prometheus, Grafana, Thanos
  • 파이프라인 매니징 -> Kubeflow, argo workflows, Airflow

여기서 서빙이란 개념은 조금 낯선데 다른 애플리케이션에서도 ML 모델을 사용할 수 있도록 모델을 배포하거나,

모델 API를 제공한다고 이해하면 될 것 같습니다.

 

그리고 위의 기능들을 제공해주는 Aws SageMaker, GCP Vertex AI, Azure Machine Learning 등이 있습니다. 

728x90
반응형
728x90
반응형

0. 계정 생성

우선 아래 주소로 들어가서 GCP 계정을 생성해줘야 한다.  

https://cloud.google.com/gcp/

 

Google Cloud 컴퓨팅, 호스팅 서비스, API

Google Cloud는 비즈니스의 발전을 위해 설계된 유연한 인프라, 엔드 투 엔드 보안, 최신 생산성 기능, 지능형 통계를 제공합니다.

cloud.google.com

 

그 후 콘솔로 이동을 눌러준다.

 

1. 인스턴스 생성 및 ssh 접속

아래와 같이 VM 인스턴스를 눌러준다.

 

인스턴스 만들기를 눌러준다.

 

인스턴스 이름, 지역, 시리즈, 머신 유형을 선택해준다.

내가 선택한 머신 유형보다 좋은 것들은 다 유료인 것 같다. 

 

원하는 대로 설정하고 만들기를 누른다.

 

조금 기다리다 보면 아래와 같이 jinho-test 인스턴스가 생성된 것을 확인할 수 있다.

 

생성한 인스턴스의 SSH를 눌러주면 아래와 같이 인스턴스에 ssh로 접속할 수 있다.

 

이렇게 무료로 나만의 서버를 얻었다! 

기념으로 업데이트를 한 번 해보자. sudo apt-get update 

잘 된다!

 

2. 스토리지 버킷 생성 

아래와 같이 브라우저를 눌러준다.

 

버킷 만들기를 눌러준다.

 

원하는 대로 설정해주고 만들기를 누른다.

버킷이 잘 생성되었다.

 

3. gsutil을 사용해서 버킷에 파일 복사하기

이제 gsutil을 사용해서 jinho-unique 버킷에 파일을 복사해보자.

gsutil ls gs://jinho-unique -> jinho-unique 버킷에 뭐가 들어있는지 확인하는 명령어다.

현재는 아무것도 저장이 안 돼있으므로 아무것도 출력이 안된다.

gsutil 뒤에 우리가 알고 있는 리눅스 명령어를 그대로 사용하면 되는 것 같다. 쉽다!

 

테스트용으로 파일 하나를 생성해보자.

gsutil cp a.py gs://jinho-unique -> jinho-unique 버킷에 방금 만든 a.py를 복사해주는 명령어다.

gsutil ls를 써서 확인 ->  잘 복사되었다!

 

4. 버킷 권한 설정

돌아와서 REFRESH를 누르면 버킷에 a.py 파일이 추가된 것을 확인할 수 있다.

 

a.py를 선택하고 권한을 눌러주자.

권한 추가를 눌러준다.

 

원하는 대로 설정하고 저장을 눌러주면 끝이다.

 

어처피 무료이지만 혹시 모르니 다 썼다면 인스턴스를 정지시켜주도록 하자!

 

728x90
반응형

'MLOps' 카테고리의 다른 글

도커파일(Dockerfile) 작성  (0) 2021.11.21
도커(Docker) 설치, 명령어  (0) 2021.11.18
MLOps란?  (0) 2021.11.16

+ Recent posts