컨테이너를 생성할 때 제한은 아래와 같이 해줍니다. 메모리는 b, k, m, g로 설정할 수 있습니다. 여기서 적용되는 메모리 제한은 hard limit입니다. 해당 메모리를 초과해서 사용하려고 하면 OOM(out of memory)이 발생됩니다. $ docker run -d -it --name local-python --memory=1g python:3.8-slim /bin/bash 한편, memory를 따로 설정하지 않으면 0으로 적용됩니다. 즉, 호스트의 메모리 전체를 공유해서 사용하게 됩니다. 잘 적용되었는지는 inspect 옵션을 통해 확인할 수 있습니다. $ docker inspect local-python | grep Memory "Memory": 1073741824, "KernelMemor..
macOS에서 docker를 사용하기 위해 그간 Docker Desktop을 사용해왔었는데 유료화 소식이 전해져 왔다. Docker Desktop은 개인은 무료, 기업은 직원이 250명 이상이거나 연매출이 대략 110억($10 million) 이상인 경우 유료 버전을 사용해야 한다 (아직 유예기간 있음). https://www.docker.com/blog/updating-product-subscriptions/ Docker is Updating and Extending Our Product Subscriptions - Docker Blog Learn from Docker experts to simplify and advance your app development and management with Do..
서비스에 도커를 도입하는 배경을 보면 MSA( Micro Service Architecture )로 부터 시작하기 때문에 사실 Container의 크기가 큰 것은 정상적인 경우가 아닙니다. 컨테이너에는 모듈이나 기능 단위를 동작하게 하는 최소한의 패키지만 포함되는 게 일반적인데 깡통 우분투를 만들어서 그 안에 온갖 서비스를 다 말아 넣는 경우는 어떤 경우가 있을까요? 쉽게 생각하면 MSA 이전의 모놀리식 아키텍처( Monolithic Architecture )를 이야기할 수 있겠습니다. 도커는 개발환경과 프러덕트 환경의 간극을 줄이는데 크게 일조하고 있는데 이게 MSA로 정교하게 나뉘어져 있는 서비스에만 국한된 이야기가 아닙니다. 모놀리식 서비스라고 하더라도 개발과 프러덕트 환경에 간극을 없게 할 수 있..
여기 블로그 글을 RSS 받으시는 분들은 아시겠지만 저는 도커 환경을 꽤 좋아합니다. 일단 1) PC를 군더더기 없이 깔끔하게 사용할 수 있는 장점이 있고 2) 정리할때도 깔끔하게 할 수 있습니다. 3) 나중에 다른 시스템으로 옮길 때 호환성은 이루말 할수 없습니다. 아무튼, 이런 장점들 때문에 웬만하면 모든 개발을 도커에서 진행하고 있는데 아래와 같은 상황을 마주했습니다. 한참 딥러닝 모델을 개발하고, 이를 jupyter notebook으로 inference등의 테스트를 진행하려고 보니, Host 머신에서 jupyter의 포트로 접속 할 수가 없지 않겠습니까? Host에서 컨테이너 내부의 포트로 접속하려면 PNAT나 Proxy를 사용해야 하는데 이런것들은 처음 컨테이너를 생성할 때 지정을 해줘야 하는 ..
GitHub을 통해 호스팅이 가능해지면서 Jekyll 블로그가 선풍적인 인기인데요, 이 대열에는 제가 활동하고 있는 Google Cloud Platform 사용자 그룹의 홈페이지도 합류해있습니다. 페이지를 운영하면서 소스코드를 수정 할 때면 바로바로 결과물을 확인 할 수 없었기 때문에 자질구레한 커밋들이 너무 많이 남게 되었는데요. 사실 로컬에 Jekyll 환경을 구축하고 결과물을 확인하면서 개발하면 이런 불상사를 막을 수 있습니다만, 그 환경을 구축하면 또 뭔가 찝찝한 설치 파일들이 OS 구석구석에 설치되겠죠. 아래처럼 gem이 기본적으로 설치되어 있어야 하고 gem으로 bundler, jekyll 설치해야 합니다. 그리고 끝으로 번들을 이용해서 서버를 올리는 구성인거죠. 뭐 설치되는게 이정도면 양반이..
(*) 우분투 16.0.4 환경에서의 글입니다. 버전이나 OS의 종류에 따라 내용이 적용되지 않을 수도 있습니다. docker를 처음 설치하고 보면 이미지나 컨터이너등 모든 정보가 쌓이는 공간이 /var/lib/docker 로 동작하는 것을 알 수 있습니다. 보통의 사용자 환경을 보면 root 디렉터리는 빠르고 비싼 SSD를 사용하기 때문에 용량이 충분하지 않은데 별 생각없이 이미지와 컨테이너를 생성하다보면 어느샌가 용량부족으로 어려움을 겪게 될 것으로 생각됩니다. 그렇기 때문에 처음 docker를 설치해줬을때부터 이런 데이터가 적재되는 곳을 충분히 여유있는 HDD로 잡아주는게 좋은데요. 이번글에서는 그 방법에 대해서 소개합니다. 우선 데이터 경로가 어디로 잡혀있는지 아래 명령어를 통해 확인해줍니다. $..
nvidia-docker를 사용하기 위해서는 우선 docker가 설치되어 있어야 한다. 우리는 대부분 커뮤니티 버전을 사용하게 될 것이므로 docker Community Edition(docker-ce) 버전으로 설치해주도록 하자. 아래 명령어를 실행하게 되면 get.docker.com에 등록되어 있는 스크립트가 바로 로컬에서 실행되게 되는데 이 스크립트는 기본적으로 docker-ce 레포지토리를 가르키고 있기 때문에 바로 실행시켜주면 되겠다. curl -fsSL https://get.docker.com/ | sudo sh 잠시후 docker 설치가 마무리 되면 nvidia-docker를 설치해주면 된다. 버전이 변경됨에 따라 내용이 달라질 수 있기 때문에 공식 홈페이지의 설치 방법도 함께 확인하면 좋다..
GPU를 사용하는 머신러닝 환경을 구축하기 위해서는 virtualenv, anaconda 등 파이썬의 가상환경을 통한 다양한 방법이 제시되는데 이와 같은 환경에는 문제가 하나 있다. 바로 다양한 버전의 CUDA를 사용하는데 상당히 제한적이라는 것인데, 이게 왜 문제가 되는가 하면 여려가지 전제를 이야기 할 필요가 있다. 보통 다양한 버전의 CUDA를 필요로 하는 경우는 여러개의 프로젝트를 병행으로 개발하는 상태이고 한개의 워크스테이션(혹은 클라우드 인스턴스)에 여러명의 엔지니어가 접속해서 작업을 진행하게 된다. 이때 A라는 엔지니어가 잘못 건드린 글로벌한 CUDA 설정이 B 개발자에게까지 영향을 줄 수 있는 상황이 충분히 존재한다. 이건 혼자 사용하는 머신이라도 마찬가지다. 참담하게도 이런경우에는 시스템..
docker container 내부에서 pytorch 로 기계학습을 진행하는 도중에 아래와 같은 에러메시지가 발생되는 경우가 있습니다. RuntimeError: DataLoader worker (pid 13881) is killed by signal: Bus error. 위 에러는 도커로 컨테이너를 생성하게 되면 호스트와 컨테이너는 공유하는 메모리 공간이 생기게 되는데 이 공간에 여유가 없어서 발생되는 에러입니다. 리눅스의 경우에는 컨테이너 내부에서 아래와 같이 df 명령어로 확인이 가능합니다. (base) root@2a48ab5fd651:~/ml# df -h Filesystem Size Used Avail Use% Mounted on overlay 427G 59G 347G 15% / tmpfs 64M ..
image import$ docker load -i image export$ docker save -o container import$ docker import ./backup.tarcontainer export$ docker export container_name > ./backup.tar image를 export 할 때 동일한 REPOSITORY가 여러개 존재하는 경우 마지막 TAG가 save 되는데, 특정 TAG는 콜론(:)으로 지정할 수 있다. 예를 들면 아래와 같다.$ docker save image_name:16.04 > ./backup.tar 참고https://docs.docker.com/engine/reference/commandline/import/https://docs.docker.co..
새로 생성되는 Container는 기본적으로 docker0 인터페이스를 사용하고, 별다른 설정을 건드리지 않았다면 bridge 모드로 동작한다. 또한 Container의 IP는 docker가 관리해줘서 172.17.0.0/16 대역으로 설정된다. 일종의 DHCP leasee 같은 개념이 되겠다. 여기서 한가지 알고 넘어가야 하는 사실은 IP가 유동이라는 사실이다. 한번 Container가 올라오면 IP가 변경될 일이 없지만 Container를 재시작하는 경우 때때로 IP가 변경된다. 아래와 같은 예를 들어보자. 이렇게 운영중이던 서비스에서 Docker 재시작으로 인해 2번 Container (172.17.0.3) 를 먼저 시작하고 1번 Container (172.17.0.2) 가 시작되었다면 Docker..
[ 최초 이미지 다운로드 ]아래처럼 이미지 다운로드를 진행한다. docker pull :docker search를 통해 어떤 버전을 다운로드 받을 수 있는 지에 대한 내용은 차후 포스팅예를들어 보면 다음과 같다. docker pull centos:6.7 [ 컨테이너 생성 ]아래와 같이 생성한다. -v, -p 는 옵션이니 생략 가능하며 적절하게 수정할 수 있겠다. docker run -d -it --name -v /pkg:/pkg \ -p 8081:80 -p 8026:25 : /bin/bash 잠깐 구문을 뜯어보면 컨테이너 이름은 에서 지정 될 것이고, 컨테이너를 생성하기 위한 이미지는 :에 centos:6.7 처럼 넣어주면 된다. -v는 host에 pkg라는 디렉토리를 guest에서 /pkg라는 디렉토리..
CentOS-6.4 에서 docker 관련 공부를 하고자했지만.. 어떤 이유인지 설치하고 실행하려고 해도 데몬 실행이 되지 않았다. 오류는 아래와 같은 메시지가 출력 된다. [root@localhost link]# docker -d WARN[0000] You are running linux kernel version 2.6.32-358.el6.x86_64, which might be \ unstable running docker. Please upgrade your kernel to 3.10.0. INFO[0000] Listening for HTTP on unix (/var/run/docker.sock) docker: relocation error: docker: symbol dm_task_get_inf..
- Total
- Today
- Yesterday