본문 바로가기

머신러닝 읽어주는 남자

docker에 대한 모든 것

반응형

빌드업

도커 설치

curl -fsSL https://get.docker.com/ | sudo sh

 

권한 문제 해결

핵심은 현재 계정을 도커 그룹에 포함시키면 됨

새로운 docker그룹 생성

sudo groupadd docker

 

현재 유저를 docker그룹에 추가하여 주기

sudo usermod -aG docker $USER

 

docker 그룹에 로그인

newgrp docker

 

도커 테스트

docker run hello-world

 

도커 설정

컨테이너 목록 확인

docker ps

 

도커 검색

 docker search <검색어> 또는 도커허브에서 검색

 

있는거 땡겨오기 

docker pull <이름>

 

가진 도커 이미지 검색 및 삭제

docker images    - 검색

docker rmi <이미지 이름>:<태그>    - 삭제

docker rmi $(docker images -q)       - 모든 이미지 삭제

 

컨테이너 생성 삭제

docker run <옵션> <이미지 이름> <실행할 파일>

docker rm <컨테이너 id 또는 이름

docker run -it --name start ubuntu /bin/bash

해설: ubuntu이미지를 start라는 이름의 컨테이너로 bash를 인터렉티브하게 수행 

 

다음은 자주 사용하는 run 옵션

-d

detached mode 흔히 말하는 백그라운드 모드

-p

호스트와 컨테이너의 포트를 연결 (포워딩)

-v

호스트와 컨테이너의 디렉토리를 연결 (마운트)

-e

컨테이너 내에서 사용할 환경변수 설정

–name

컨테이너 이름 설정

–rm

프로세스 종료시 컨테이너 자동 제거

-it

-i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션

–link

컨테이너 연결 [컨테이너명:별칭]

   

 

컨테이너 목록 확인

docker ps

doker ps -a: 정지된 목록까지 보여줌

 

컨테이너 수행/정지

docker run <컨테이너 이름 또는 ID>

docker stop <컨테이너 이름 또는 ID>

docker restart <컨테이너 이름 또는 ID>

run은 이미지에서 새로운 컨테이너를 만드는 용이지만 start는 기존의 컨테이너를 수행하는 용도이다

 

컨테이너 접속

docker attach <컨테이너 id>

 

컨테이터 빠져나오기

exit 또는 ctrl + D: 종료

ctrl+p, ctrl+q: 종료하지 않고 빠져나오기

 

컨테이너 안 명령 실행

docker exec <컨테이너명> echo "Hello"

 

dockerfile로 이미지 만들기

#어떤 이미지 기반으로 할지<이미지 이름>:<태그>

FROM ubuntu:14:04 

 

#메인테이너 정보

MAINTAINER jl jl@example.com 

 

#RUN 실행할때마다 레이어가 생성되고 캐시됨. 실행할 shell 스크립트

RUN apt-get updatRUN apt-get update && apt-get install -y --no-install-recommends\
        libhdf5-dev\

        gcc \

RUN pip3 install -U --user six wheel mock

 

#호스트와 공유할 디렉토리

VOLUME ["/data","/etc/nginx"] 

 

#다음 cmd에서 설정한 실행 파일이 실행될 디렉토리, cd랑 동일

WORKDIR /etc/nginx 

 

#컨테이너가 시작되었을 때 실행할 명령어

CMD ["nginx"] 

 

EXPOSE 80

EXPSE 443  # 호스트와 연결할 포트

 

#둘다 파일을 복사하는 기능을 기본으로 하고 ADD가 몇가지 추가 기능이 있다. copy를 기본으로 쓰는게 속편한듯

COPY jupyter_notebook_config.py /root/.jupyter/

ADD tensorflow-1.14.0-cp37-cp37m-linux_armv7l.whl .

 

 

 

  • RUN. 새로운 레이어에서 명령어를 실행하고, 새로운 이미지를 생성한다. 보통 패키지 설치 등에 사용된다.여기서 레이어는 세이브포인트 개념으로 실패하면 실패한 레이어부터 실행함 e.g. apt-get
  • CMD. default 명령이나 파라미터를 설정한다. docker run 실행 시 실행할 커맨드를 주지 않으면 이 default 명령이 실행된다. 그리고 ENTRYPOINT의 파라미터를 설정할 수도 있다. CMD의 주용도는 컨테이너를 실행할 때 사용할 default를 설정하는 것이다.
  • ENTRYPOINT. 컨테이너를 실행할 수 있게 설정한다

 

해당 기준으로 이미지 생성

docker build --tag <이름>:<테그> <dockerfile 경로>

예시) docker build --tag new:0.1 .

 

실행 예시

docker run --name new -d -p80:80 -v /root/data:/data new:0.1

-d     백그라운드 

-p80:80     호스트 80번 컨테이너 80을 연결하여 외부에 노출

-v /root/data:/data   호스트의 /root/data를 컨테이너 /data로 연결해줌

 

실행 예시

docker run --name <이름> -it -v /root/data:/data new:0.1 /bin/bash

-d     백그라운드 

-p80:80     호스트 80번 컨테이너 80을 연결하여 외부에 노출

-v /root/data:/data   호스트의 /root/data를 컨테이너 /data로 연결해줌

 

 

현재까지 작업해 놓은 컨테이너를 그대로 저장

docker commit CONTAINER IMAGE_NAME

기본적으로 과거에는 도커와 엔비디아 도커가 분리되어 있었으나 

요즘에는 통합되어서 gpu 옵션을 추가해야 엔비디아 도커로 돌아간다

 

gpu옵션 사용법

#### Test nvidia-smi with the latest official CUDA image

 

docker run --gpus all nvidia/cuda:10.0-base nvidia-smi

 

# Start a GPU enabled container on two GPUs

docker run --gpus 2 nvidia/cuda:10.0-base nvidia-smi

 

# Starting a GPU enabled container on specific GPUs

docker run --gpus '"device=1,2"' nvidia/cuda:10.0-base nvidia-smi

docker run --gpus '"device=UUID-ABCDEF,1"' nvidia/cuda:10.0-base nvidia-smi

 

# Specifying a capability (graphics, compute, ...) for my container

# Note this is rarely if ever used this way

docker run --gpus all,capabilities=utility nvidia/cuda:10.0-base nvidia-smi

 

이미 실행된 컨테이너 그대로 사용하기

docker exec -it <container> bash

 

반응형

'머신러닝 읽어주는 남자' 카테고리의 다른 글

음악생성  (0) 2020.03.02
음악 생성 테크트리  (0) 2020.03.01
오분류(misclassify), 상관 없는 데이터(out-of-distribution)  (0) 2019.10.18
model knowledge distillation  (0) 2019.10.15
Adversarial examples  (0) 2019.01.15