
Docker는 무엇일까?
도커는 2013년 Docker(구 dotCloud)에서 출시한 오픈 소스 컨테이너 프로젝트 입니다. 도커는 소프트웨어 컨테이너 내부에 있는 응용프로그램 배포를 자동화하는 오픈소스 도구 입니다.
요새 서버 환경들은 클라우드 환경으로 많이 사용하기 떄문에 서버를 구입하기보다는 사용 요금만 내고 가상 서버를 빌려 쓰게 되었습니다. 특히 물리서버를 구축하려면 상당한 시간이 걸립니다. 하지만 클라우드 환경에서는 서버들을 클릭 몇 번 만으로도 가상 서버를 만들 수 있습니다.
가상 머신
가상 머신은 편하긴 하지만 성능이 좋지 못한 단점이 있습니다. 지금까지 CPU에 가상화를 위한 기능들이 많이 추가되었지만 아직도 가상 머신은 물리 서버에 비해 속도가 느립니다.

가상 머신 자체는 완전한 컴퓨터라 항상 게스트 OS를 설치해야 합니다. 그래서 이미지 안에 OS가 포함되기 때문에 이미지 용량이 커질수밖에 없습니다.
컨테이너
컨테이너는 게스트OS를 설치하지 않습니다. 도커 이미지에 서버 운영을 위한 프로그램과 라이브러리만 격리해서 사용할 수 있습니다. OS자원은 호스트와 공유합니다.
컨테이너는 하드웨어를 가상화하는 계층이 없기 때문에 메모리 접근, 파일시스템, 네트워크 속도가 가상 머신에 비해 월등히 빠릅니다

container vs VM
어떤 환경일때 Container를 써야 맞는걸까요? 모든 가상환경에 컨테이너를 적용하기엔 아직 어렵다고 생각합니다. 배포가 없는 서버들 같은 경우 예를들면 메일서버나 AD서버, 파일서버엔 VM서버들이 더 적합하다고 생각합니다.
도커 기본적인 명령어
$ docker search centos
docker search 명령어로 docker hub에 있는 이미지를 검색 할 수 있습니다.
docker search <이미지 이름>

$ docker pull centos:latest
docker pull 명령어로 원하는 이미지를 받을 수 있습니다. 이때 latest 는 가장 최신 버전을 다운 받을 수있습니다.

이제 이미지를 다운 받았으니 목록을 출력해 볼까요?
image 명령어로 도커 이미지 확인하기
$ docker images
docker images 명령어는 모든 이미지 목록을 출력합니다. 이때 docker images만 명령하면 모든 이미지가 나오게 되고 docker images <운영체제 이름>을 하게되면 이름은 같지만 태그가 다른 이미지를 출력됩니다.

run 명령어로 컨테이너 생성하기
$ docker run -i -t --name centos centos /bin/bash
docker run 명령어는 컨테이너를 생성하는 명령어 입니다.
옵션 i,t 옵션을 사용하면 실행된 Bash셸에 입력 및 출력을 할 수 있습니다.
옵션 — name 을 사용하면 컨테이너 이름을 지정 할 수 있습니다.

PS 명령어로 컨테이너 목록 확인하기
$ docker ps
docker ps 명령어를 사용하면 실행되고 있는 컨테이너만 목록에 나오게 됩니다. 하지만 옵션 -a 를 붙여준다면 정지되어 있는 컨테이너까지 출력합니다.

Attach 명령어로 컨테이너 접속하기
$ docker attach centos
docker attach <컨테이너 ID> 또는 <컨테이너 이름> 을 입력해서 컨테이너에 접속 할 수 있습니다.
이때 ctrl+p, ctrl+q 를 차례대로 입력하면 컨테이너를 정지하지않고 실행된 상태로 빠져나올수있습니다.

exec 명령어로 외부에서 명령어 실행하기
$ docker exec centos echo "Hello world"
docker exec <컨테이너 이름> 또는 <컨테이너 ID> <명령어>를 사용하면 컨테이너에 접속하지 않고 명령어 실행이 가능합니다.

start, stop 명령어로 컨테이너 멈추고 실행하기
$ docker start centos
start 명령어를 사용하면 멈춰있는 컨테이너를 다시 시작 할 수 있습니다.
docker start <컨테이너 이름>
$ docker stop centos
stop 명령어를 사용하면 실행되고 있는 컨테이너를 다시 시작 할 수 있습니다.
docker stop <컨테이너 이름>

틀린부분은 지적 해주시면 감사하겠습니다 :D
감사합니다.