[Docker] Docker 시작하기

[Docker] Docker 시작하기


도커(Docker)

  • 도커는 보통 컨테이너를 생성하고 관리하는 주체
  • 기존 VM 등 과의 차이점
    • 호스트의 커널을 공유
    • 이미지 용량이 적음
    • 성능 손실이 거의 없음

도커 엔진

  • 이미지
    • 컨테이너를 생성할 때 필요한 요소 = iso 파일 느낌
  • 컨테이너
    • 이미지를 읽기 위한 전용. 이미지들를 담는 그릇으로 이해
    • 컨테이너에서 작업을 해도 기존의 이미지 자체에 변화는 없음
  • 이미지와 컨테이너는 1:N
    • 하나의 이미지를 여러 컨테이너에서 사용가능
    • ex) ubuntu:16.04LTS 기반의 각각의 컨테이너의 두개에 서로 다른 DB를 설치
    • 각각의 컨테이너는 독립적

도커를 왜 쓸까?

  • 제가 생각할 때 일딴 VM 보다 가볍습니다. 그래도 원활하게 사용하려면…하드웨어 리소스는..많이 먹긴합니다.
  • 도커 환경에서 개발한다면, 개발팀 모두가 동일한 개발 환경에서 시작할 수 있어요.
  • mac window 등 host OS에서 오는 개발 문제가 해결됩니다.
  • MSA에서 개발하는데 Docker를 빼먹을 수가 없겠죠.. 오케스트레이션 툴(예로, 쿠버네티스(k8s))을 써야하니까요?!

도커 명령어 시작하기

  • 먼저, 이미지는 dockerhub에서 혹은 아래 명령어로 탐색가능.

$ docker search ubuntu

  • ubuntu 이름을 가진 이미지를 docker hub에서 검색

$ docekr run -i -t ubuntu16.04

  • 기존에 local에 있는 이미지이거나 없으면 docekr hub에서 다운받아서 docker가 실행.
  • -i -t 옵션은 입출력이 가능한 쉘이 뜸. -d 옵션을 사용하면 deamon 처럼 구동만 됨.

$ docker images

  • 지금까지 내려받은 이미지 목록 출력

$ docker create -i -t --name myubuntu ubuntu16.04

  • 컨테이너를 생성한다 create -구동옵션(i,t,d) –name 컨테이너이름 이미지 이름
  • 이미지가 로컬에 있으면 생성 없으면, 다운로드 후 컨테이너 생성. 구동(실행)은 하지않는다

$ docker start myubuntu

  • myubuntu docker 컨테이너를 실행

$ docker ps

  • 현재 실행되고 있는 도커 확인하기

$ docker attach myubuntu

  • myubuntu 컨테이너와 상호작용할 수 있는 쉘 실행(즉, 컨테이너 내부)

/# exit OR /# 컨트롤 + P, Q

  • exit: docker 컨테이너를 stop 후 빠져나옴
  • 컨트롤 + P, Q: 컨테이너는 그대로 실행되며, 빠져나옴
  • docker ps로 상태를 확인하세요.

추가로 알아보기 정리 및 명령어

  • run 명령어
    • docker 이미지를 로컬이든 hub든 가져오고, Pull
    • 컨테이너를 만들고 create(name을 지정안하면 기본값 이미지 네임)
    • 컨테이너를 구동상태 start 로 만든다.
  • docker Container ID
    • 해시값으로, start 할 때, name이 아니라 해시값 4개정도만 입력해도 구동이가능.
    • 전체 해시 값을 확인하려면,
      $ docker inspect 이미지네임
  • docker 상태 정보 확인하기
    • $ docker ps: 현재 구동중인 것
    • $ docker ps -a: 모든 생성된 컨테이너의 리스트 호출
  • docker ps에서 나오는 정보 정리
    • CONTAINER ID: 컨테이너에게 할당된 고유한 ID 값
    • IMAGE: 추가구분자/이미지네임:버전
    • COMMAND: 컨테이너가 구동될 때 실행되는 명령어. 특이사항이 아니면 crate시 자동으로 생성
      $ docker run -i -t ubuntu:16.04 echo hello!: 실행 후, 바로 hello! 찍힘

    • CREATE: 생성날짜 정보
    • STATUS: 상태정보
    • PORTS: 예시 0.0.0.0:3307->3307 —> 호스트 0.0.0.0:3307 포트는 docker 3307로 연결
    • NAMES: 컨테이너 이름. 구동(start)시 이름이나 CONTAINER ID 사용
  • 기타 명렁어
    $ docker remame 기존컨테이너이름 바꿀컨테이너이름 : 컨테이너 이름변경 $ docker rm 컨테이너이름: 컨테이너를 삭제

참고: 책 시작하세요! 도커, 그리고 스스로 찾고 실습한 정보를 정리. 따라해보세요!