Python/IDE, 버전관리, 도커

도커 이미지 생성과 삭제 방법.

frcn 2020. 8. 13. 16:38
반응형

1. 도커 이미지 생성 (Python 3.6 docker container image build)

 

1) 기본적인 이미지 생성 방식

 

 <1> 우분투 이미지를 베이스로 파이썬을 설치한 후, 필요한 모듈을 pip받아와서 실행.

 

 <2> 미니콘다 이미지를 베이스로 conda environment를 설치하기.

 

둘 다 설명하도록 하겠다.

 

 

 

2. 우분투 이미지를 베이스로 설치하는 방법.

 

머신러닝을 위해 tensorflow와 mxnet, torch가 설치된 나만의 image를 빌드해보자.

 

우선 폴더를 만들고, 해당 폴더에 Dockerfile, requirements.txt, test.py를 생성.

 

  <1> Dockerfile

###Dockerfile

FROM ubuntu:16.04

# 환경변수 설정 (옵션)
ENV PATH /usr/local/bin:$PATH
ENV LANG C.UTF-8

# 기본 패키지들 설치 및 Python 3.6 설치
RUN apt-get update
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:fkrull/deadsnakes
RUN apt-get update
RUN apt-get install -y --no-install-recommends python3.6 python3.6-dev python3-pip python3-setuptools python3-wheel gcc
RUN apt-get install -y git

#pip 업그레이드
RUN python3.6 -m pip install pip --upgrade

# 현재 폴더내의 모들 파일들을 이미지에 추가
ADD . /app

# 작업 디렉토리로 이동
WORKDIR /app

# 작업 디렉토리에 있는 requirements.txt로 패키지 설치
RUN pip3 install -r requirements.txt

# 컨테이너에서 실행될 명령어. 컨테이거나 실행되면 app.py를 실행시킨다.
CMD python3.6 test.py

 

 <2> requirements.txt

pip 받아올 대상을 명시.

#버전을 지정하고 싶다면 (==)사용
tensorflow==2.0
mxnet
torch

 

<3> test.py

간단한 코드를 생성.

import tensorflow as tf
import mxnet
import torch

print(tf.__version__)
print(mxnet.__version__)
print(torch.__version__)
print("hello")

 

 <4> cmd / zsh에서 build 실행

#cmd에서 위의 파일들이 있는 폴더로 이동
cd 폴더명
docker build -t 이름 . # . 을 빼먹지 말 것

#빌드가 다 되면, 
docker run 이름

 

결과 :

 

3. miniconda를 기반으로 이미지 빌드

 

 <1> 콘다 가상환경에서 environment.yaml을 export해야함.

#cmd에서 목록을 추출할 가상환경을 실행.

conda activate 가상환경이름
conda env export --no-builds > environment.yaml

#다음과 같은 파일이 생성됨
"""
name: ner
channels:
  - defaults
dependencies:
  - ca-certificates=2020.6.24
  - certifi=2020.6.20
  - libedit=3.1.20191231
  - libffi=3.3
  - ncurses=6.2
  - openssl=1.1.1g
  - pip=20.2.2
  - python=3.6.10
  - readline=8.0
  - setuptools=49.2.0
  - sqlite=3.32.3
  - tk=8.6.10
  - wheel=0.34.2
  - xz=5.2.5
  - zlib=1.2.11
  - pip:
    - torch==1.4.0
    - tqdm==4.48.2
    - transformers==3.0.2
    - seqeval==0.0.12
prefix: /Users/so/opt/anaconda3/envs/ner


"""

 

 

 <2> Dockerfile 생성

FROM continuumio/miniconda3

#모든 파일을 app이라는 폴더를 만들어서 저장.
ADD . /app

#conda update
RUN conda update conda

#실행
RUN conda env create -f /app/environment.yaml

ENV PATH /opt/conda/envs/mro_env/bin:$PATH
RUN /bin/bash -c "source activate mro_env"

CMD python3.6 /app/test.py

 

 <3> test.py는 위와 동일.

 

 <4> cmd / zsh에서 build 실행

#cmd에서 위의 파일들이 있는 폴더로 이동
cd 폴더명
docker build -t 이름 . # . 을 빼먹지 말 것

#빌드가 다 되면, 
docker run 이름

 

결과는 동일

 

 

 

 

4. 도커 이미지, 컨테이너 삭제.

 

1) 동작중인 컨테이너 확인

$docker ps

#모두 종료
docker stop $(docker ps -a -q)

 

 

2) 정지된 컨테이너 확인

$docker ps -a

#모두 삭제
docker rm $(docker ps -a -q)

 

 

3) 컨테이너 삭제

# 1개씩 삭제할 때
$docker rm [컨테이너 id]

# 여러개를 삭제할 때
$docker rm [컨테이너 id],[컨테이너 id]

#모두 삭제
$docker rmi $(docker images -q)

 

 

4) 현재 이미지 확인

$docker images

 

 

5) 이미지 삭제

$docker rmi [이미지id]

#컨테이너가 있는 경우, 이미지 삭제가 안될수 있음
#f옵션을 추가하면 컨테이너도 같이 강제로 삭제함

$docker rmi -f[이미지id]

 

 

6) 실행 중인 컨테이너에 접근

#실행 중인 컨테이너의 아이디 확인
$docker ps

#컨테이너의 bash를 실행해서 접근
$docker exec -it 컨테이너id /bin/bash

#다 끝나고 나가려면
exit
반응형