컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있도록 하는 도구
- 컨테이너란?
하나의 컴퓨터 환경 내에서 독립적인 컴퓨터 환경을 구성해서, 각 환경에 프로그램을 별도로 설치할 수 있게 만든 것=> 하나의 컴퓨터 환경 내에서 여러 개의 미니 컴퓨터 환경을 구성할 수 있는 형태로 여기서 말하는 미니 컴퓨터 환경을 Docker에서 컨테이너라 부른다
'컨테이너'와 '컨테이너를 포함하고 있는 컴퓨터'를 구분하기 위해 컨테이너를 포함하고 있는 컴퓨터를 '호스트(host)컴퓨터'라고 부른다.
이식성 : 특정 프로그램을 다른 곳으로 쉽게 옮겨서 설치 및 실행할 수 있는 특성
예를 들어, 친구 컴퓨터에는 MySQL이 에러 없이 잘 깔리는데, 내 컴퓨터에 똑같이 MySQL을 깔려고 하니 에러가 발생하는 상황
에러가 발생하는 원인은 버전 문제, 운영체제가 다른 문제.. 등 다양한 이유로 에러가 발생한다.
설치 과정이 복잡한 경우에는 컴퓨터를 새로 살 때마다 복잡한 설치를 다시 진행해야 한다.
도커의 장점
- 매번 귀찮은 설치 과정을 일일이 거치지 않아도 된다.
- 항상 일관되게 프로그램을 설치할 수 있다.(버전, OS, 환경 설정 등 고려 X)
- 프로그램이 독립적 환경에서 실행되기 때문에 프로그램 간에 충돌 X
컨테이너는 '독립적인 컴퓨터 환경'이라고 했다
디스크(저장 공간) : 각 컨테이너마다 각자의 저장 공간을 가지고 있으며 컨테이너 간에 내부에 있는 파일에 접근할 수 없다.
네트워크(IP, PORT) : 각 컨테이너마다 고유의 네트워크를 가지고 있다.
닌텐도와 같은 게임기를 보면 여러가지 칩을 꽂아서 다양한 게임을 즐길 수 있게 되어 있다.
=> Docker에서는 닌텐도의 칩과 같은 역할을 하는 개념이 이미지(image)이다.

이미지는 프로그램을 실행하는 데 필요한 설치 과정, 설정, 버전 정보 등을 포함하고 있다.(프로그램을 실행하는 데 필요한 모든 것을 포함)
Docker는 터미널에서 명령어를 통해 조작한다.
1. Nginx 이미지 다운로드
Nginx를 미니 컴퓨터에서 실행하기 위해 닌텐도 칩으로 만드는 과정
$ docker pull nginx
(다운로드 된 이미지 확인 시 => $ docker image ls)
2. 이미지를 컨테이너에 올려 Nginx 서버 실행
닌텐도 칩으로 만든 Nginx를 미니 컴퓨터 환경에서 실행시키는 과정
$ docker run --name webserver -d -p 80:80 nginx
(실행되고 있는 모든 컨테이너(미니 컴퓨터) 상태 확인 => $ docker ps)

3. 특정 컨테이너 정지
미니 컴퓨터 환경에서 실행하던 닌텐도 칩 종료
$ docker stop webserver
이미지를 실행시킬 때 만들었던 컨테이너의 이름으로 정지시킴