[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 컨테이너이름
: 컨테이너를 삭제
참고: 책 시작하세요! 도커, 그리고 스스로 찾고 실습한 정보를 정리. 따라해보세요!