빌드업
도커 설치
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\ 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 .
|
|
해당 기준으로 이미지 생성
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 |