크리에이티브 커먼즈 라이선스
Creative Commons License

도커(Docker) 커맨드 요약

출처: The Docker Book (지은이:제임스 턴불, 옮긴이:장독대, 출판사:루비페이퍼)


도커 관련 개념
+ 도커 이미지
  - 컨테이너 실행을 위해 필요한 프로그램/라이브러리/소스파일 등의 묶음
  - docker build 명령으로 이미지 생성
  - 이미지는 레포지터리에 존재
  - 레포지터리는 레지스트리에 존재
  - 디폴트 레지스트리는 Docker Inc가 관리하는 퍼블릭 레지스트리인 도커 허브(Docker Hub)
+ Dockerfile
  - 도커 이미지 생성을 위해 작성하는 파일
  - C/C++ 빌드시 사용하는 Makefile에 해당
+ 도커 컨테이너
  - 도커 이미지를 실행한 상태
  - 하나의 이미지로 여러개의 컨테이너를 만들 수 있음
  - docker run 커맨드로 컨테이너 실행
+ union mount
  - 한번에 여러 파일 시스템을 마운트 하지만 마치 하나의 파일 시스템처럼 보이도록 마운트
  - 도커의 파일 시스템은 bootfs부터 레이어 형태로 쌓인다
+ 복사후 쓰기
  - 파일을 변경하려면 그 파일은 아래에 존재하는 읽기-전용 레이어로부터 읽기-쓰기 레이어로 복사된다
  - 파일의 읽기-전용 버전은 사라지는 것이 아니라 계속 존재

도커 관련 서비스
+ Quay
  - 퍼블릭 & 프라이빗 레지스트리 서비스 제공
  - 도커 허브의 대안
+ Orchard
  - https://www.orchardup.com/
  - Get Docker host in the cloud, instantly
  - 프라이빗 레지스트리 서비스 제공
  - 도커 컨테이너의 클라우드 호스팅 서비스 제공
  - 유료 서비스
  - Simple PaaS?

Docker 커맨드
+ docker attach 커맨드: 컨테이너에 재접속
+ docker build 커맨드: 도커 이미지 빌드
  > -t 옵션: 레포지터리 이름을 지정
+ docker images 커맨드: 도커 이미지 리스트 확인
+ docker info 커맨드: 도커가 정상 동작하는지 확인
+ docker inspect 커맨드: 컨테이너 상세 정보 확인
+ docker logs 커맨드: 컨테이너의 로그를 가지고 온다
  > -f 옵션: 로그 tailing
  > -f --lines 옵션
  > -t 옵션: 로그를 타임스탬프와 함께 출력
+ docker ps 커맨드: 실행중인 컨테이너 목록 확인
  > -a 옵션: 중지된 컨테이너 포함, 모든 컨테이너 목록 표시
  > -l 옵션: 포트 맵핑 확인
+ docker pull 커맨드: 도커 레지스트리에서 도커 이미지 가져오기
  > 디폴트 레지스트리는 Docker Inc가 관리하는 퍼블릭 레지스트리인 도커 허브(Docker Hub)
+ docker push 커맨드: 이미지를 도커 허브에 넣는다
+ docker rm 커맨드: 컨테이너 제거
+ docker run 커맨드: 도커 컨테이너 실행
  > -i 옵션: 컨테이너가 STDIN을 오픈해서 유지하도록 지정
  > -t 옵션: 컨테이너에 pesudo-tty(터미널)를 할당
  > 실행중인 컨테이너 내부에서
  >     ps 명령으로 컨테이너 프로세스 체크 가능
  >     apt-get 명령으로 SW 패키지 설치 가능
  > --name 옵션: 컨테이너 이름을 지정
  >    옵션을 사용하지 않으면 임의의 이름을 자동 할당
  > -d 옵션: 컨테이너를 데몬 형태로 실행
  > 포트 오픈 옵션
  > -p 옵션: 컨테이너의 어떤 네트워크 포트를 오픈할지 지정
  >     Dockerfile의 EXPOSE 명령으로 지정한 포트의 오픈 여부가 실행단계에서 결정된다
  > -P 옵션: Dockerfile에서 EXPOSE된 모든 포트를 오픈
  > -v 옵션: 호스트에 있는 디렉터리를 컨테이너 안의 볼륨(디렉토리)으로 맵핑
  >     어플리케이션이나 코드가 아직 완성되지 않아서 이미지에 포함하고 싶지 않은 경우 유용
  >     목적지에 rw나 ro 옵션을 추가하여 목적지의 읽기/쓰기 상태 설정 가능
  > --link 옵션: 컨테이너와 컨테이너의 네트워크를 연결
  >     두개의 인자를 요구
  >     하나는 링크할 컨테이너의 이름
  >     다른 하나는 링크를 위한 alias
+ docker start 커맨드: 중지된 컨테이너 시작
+ docker stop 커맨드: 데몬 컨테이너를 중지
+ docker top 커맨드: 실행 중인 프로세스를 조사

Dockerfile 명령
+ EXPOSE 명령: 컨테이너에 있는 어플리케이션이 컨테이너에 있는 특정 포트를 사용하도록 지정
  > docker run 커맨드로 컨테이너를 실행할 때 포트를 오픈할 수 있도록 대기
+ ENV 명령: 이미지에 환경 변수 설정
  > docker run 실행시 -e 옵션으로도 전달 가능
+ CMD 명령: docker run 커맨드로 컨테이너를 생성할 때 실행할 명령을 설정
+ ENTRYPOINT 명령: CMD와 유사, 쉽게 오버라이되지 않는 실행 명령을 설정
+ WORKDIR 명령: 컨테이너를 위한 작업 디렉터리 설정
  > docker run 실행시 -w 옵션으로 오버라이딩 가능
+ VOLUME 명령: 컨테이너에 볼륨(디렉토리)을 추가
  > 볼륨은 컨테이너 사이에서 공유되고 재사용된다
  > 컨테이너는 볼륨을 공유하기 위해 실행될 필요 없다
  > 볼륨에 대한 변경은 바로 적용된다
  > 볼륨 변경은 이미지 업데이트시 포함되지 않는다
  > 볼륨은 컨테이너가 사용하지 않을 때까지 유지된다
+ ADD 명령: 이미지에 파일과 디렉토리를 추가
+ COPY 명령: ADD 명령과 유사, 파일 복사에 집중, 자동 압축 해제 같은 기능 없음


(이상)


저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG docker

댓글을 달아 주세요

크리에이티브 커먼즈 라이선스
Creative Commons License

Karma 개발자가 직접 쓴 Karama 에 대한 소개 <논문>

을 요약한다. TDD(Test Driven Development)에 대한 저자의 확고한 신념을 느낄 수 있었다.


TDD

  • TDD는 고품질의 SW를 개발할 수 있는 효과적인 방법
  • TDD는 문서화 측면에서도 이득, 테스트 코드는 항상 up-to-date한 (개발) 코드의 사용법을 알려준다(알려줄 수밖에 없다)
  • 테스트 가능한 코드(testable code)는 재사용성(reusable)이 더 높다


TDD를 위해서는 두가지 전제 조건이 필요

  • Testable Code: 느슨하게 결합된 모듈 구조로 코드를 개발, AngularJS 같은 프레임워크가 해결
  • Testing Environment: Karma 같은 테스트 자동화 도구가 해결


Karma는

  • JavaScript를 위한 Test Runner
  • Jasmine 같은 Test Framework 이 아님. 어떤 Test Framework도 사용 가능(Karma의 장점)
  • 웹앱 테스트의 가장 어려운 점은 코드를 테스트하기 위해 에디터를 떠나 브라우저를 실행시켜 결과를 확인해야 하는 워크플로우의 단절 (context switching), Karma는 이를 해결하기 위한 도구


Karma 모듈 구성도 (Figure 4.1: The high level architecture)


왜 클라이언트-서버 구조를 선택했나?
웹앱은 다양한 기기와 다양한 브라우저에서 실행, 디바이스와 브라우저의 편차를 테스트하기 위해 클라이언트를 분리했음


(이상)

저작자 표시 비영리 변경 금지
신고
Posted by ingee
TAG Karma, TDD

댓글을 달아 주세요

크리에이티브 커먼즈 라이선스
Creative Commons License
정갈하게 편집된 Grunt 소개 글을 봤다. 글쓴이가 디자이너라고 한다.
Grunt for People Who Think Things Like Grunt are Weird and Hard
http://24ways.org/2013/grunt-is-not-weird-and-hard/?utm_content=buffer4bb0b

Grunt는 Task Runner이다. C/C++ 개발자에게 친숙한 make와 똑같은 역할을 한다.


Grunt에만 관심을 가질게 아니라 Yeoman을 보는 것이 좋다.
Yeoman (http://yeoman.io/)은,
  • yo : 스캐폴딩(Scaffolding : 골격, 뼈대) 자동 생성 도구
  • grunt : 타스크 실행 도구
  • bower : 패키지(라이브러리) 관리 도구
  • ...들을 잘 묶어 놓은 개발도구이다.
한시간 정도 투자하면 사용법을 익힐 수 있는 튜토리얼을 제공한다 (http://yeoman.io/codelab.html).
웹 개발자에게 축복과도 같은 도구다. Node.js 가 세상을 많이 바꿔놓는 것 같다.

저작자 표시 비영리 변경 금지
신고
Posted by ingee

댓글을 달아 주세요



티스토리 툴바