Skip to content

Instantly share code, notes, and snippets.

@choiseoungho
Created March 3, 2019 01:46
Show Gist options
  • Save choiseoungho/cd69680da629bc9ba40e74d6d53ac60f to your computer and use it in GitHub Desktop.
Save choiseoungho/cd69680da629bc9ba40e74d6d53ac60f to your computer and use it in GitHub Desktop.
도커란
하나의 서버에 여러개의 프로그램을 설치하는 것도 문제엿는데 서로 사용하는 라이브러리의 버전이 다르거나 동일한 포트를 사용하는 경우는 설치가 까다로워졌습니다.
DevOps의 등장으로 개발주기가 짧아지면서 배포는 더 자주 이루어지고 마이크로 서비스 아키텍처가 유행
도커는 컨테이너 기반의 오픈소스 가상화 플랫폼
벡엔드 프로그램, 데이터베이스 서버, 메시지 큐등 어떤 프로그램도 컨테이너로 추상화할 수 있고,
조립 PC, AWS, Azure, Google Cloud등 어디서든 실행할 수 있다.
컨테이너
격리된 공간에서 프로세스가 동작
e.g) VMware VirtualBox 같은 가상머신은 호스트 OS 위에 게스트 OS전체를 가상화하여 사용하는 방식
도커 이미지는 Docker hub 에 등록하거나 Docker Registry 저장소를 직접 만들어 관리할 수 있다.
레이어 저장방식
도커 이미지는 컨테이너를 실행하기 위한 모든 정보를 가지고 있기 때문에 보통 용량이 수벡메가 MB에 이릅니다.
처음 이미지를 다운 받을 땐 크게 부담이 안되지만 기존 이미지에 파일 하나 추가햇다고 수백메가를 다시 다운받는다면 매우 비효율적
도커는 이러한 문제를 해결하기 위해 레이어 라는 개념을 사용하고 유니온 파일 시스템을 이용하여 여러개의 레이어를 파일 시스템으로 사용
컨테이너를 생성할때도 레이어 방식으로 사용한느데 기존의 이미지 레이어 위에 읽기 쓰기 레이어를 추가,
이미지 레이어를 그대로 사용하면서 컨테이너가 샐행중에 생성하는 파일이나 변경된 내용은 읽기/쓰기 레이어에 저장
이미지는 url 방식으로 관리하며 태그를 붙일 수 있다.
도커는 이미지를 만들기 위해 Dockerfile 이라는 파일에 자체 DSL Domain-Specific language 언어를 이용하여 이미지 생성 과정을 적습니다.
도커 이미지의 용량은 보통 수멕메가로 수기가 넘는 경우도 흔함.
도커는 Docer hub를 통해 공개 이미지를 무료로 관리
CCommand 와 API
도커 클라이언트의 커맨드 명령어는 직관적이고 사용하기 쉬우며 컨테이너의 복잡한 시스템 구성을 이해하지 못하더라고 편하게 사용할 수 있다.
http 기반의 Rest API도 지원하여 확장성이 굉장히 좋다.
도커 설치하기
리눅스에 도커를 설치하는 방법은 자동 설치 스크립트를 이용하는 것이 가장 쉽다.
명령어를 입력하며 root 권한을 요구
docker 는 기본적으로 root 권한이 필요, root가 아닌 사용자가 sudo 없이 사용하려면 해당 사용자를 docker 그룹에 추가
sudo usermod -aG docker $USER # 현재 접속중인 사용자에게 권한주기
sudo usermod -aG docker your-user # your-user 사용자에게 권한주기
사용자가 로그인 중이라면 다시 로그링 후 권한이 적용됩니다.
도커는 클라이언트와 서버로 나뉘어져 있다.
도커는 하나의 실행파일이지만 실제로 클라이언트와 서버역할을 각각 할 수 있다.
도커 커멘트를 입력하면 도커 클라이언트가 도커 서버로 명령을 전송하고 결과를 받아 터미널에 출력해 준다.
기본값이 도커 서버의 소켓을 바라보고 있기 때문에 사용자는 의식하지 않고 마치 바로 명령을 내리는 것 같은 느낌을 받는다. 이러한 설계가 mac 이나 windows의 터미널에서
명령어를 입력했을때 가상 서버에 설치된 동작하는 이유
컨테이너 실행하기
도커를 실행하는 명령어는 다음과 같다.
docker run [OPTION] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
다음은 자주 사용하는 옵션들
옵션
-d detached mode 흔히 말하는 백그라운드 모드
-p 호스트와 컨테이너의 포트를 연결
-v 호스트와 컨테이너의 디렉토리를 연결 (마운트)
-e 컨테이너 내에서 사용할 환경변수 설정
-name 컨테이너 이름 설정
-rm 프로세스 종료시 컨테이너 자동 제거
-it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션
-link 컨테이너 연결 [컨테이너명:별칭]
docker run unbuntu:16.04
run 명령어를 사용하면 사용할 이미지가 저장되어 있는지 확인하고 없다면 다운로드 (pull)를 한후 컨테이너를 생성(create) 하고 시작(start) 합니다.
위 예제는 ubuntu:16.04 이미지를 다운 받은 적이 없기때문에 이미지를 다운로드한 후 컨테이너가 실행
컨테이너는 프로세스이기 때문에 실행중이 프로세스가 없으면 컨테이너는 종료된다.
docker run --rm -it ubuntu16.04 /bin/bash
키보드 입력을 위해 -it 옵션, 추가적으로 프로세스가 종료되면 컨테이너가 자동으로 삭제되도록 --rm 옵션도 추가
이번에는 바로 전에 이미지를 다운 받았기 때문에 이미지를 다운로드 하는 화면 없이 바로 실행
exit 로 bash 쉘을
종료하면 컨테이너도 같이 종료
Why Docker ?
다양한 딥러닝 프레임워크를 깔끔하기 지원 가능
패키지 표준화하면서 동시에 개인 환경에 맞도록 셋팅 가능
Inference
1. Batch
2. Serving
3. Streaming
Reference
1. https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment