docker
Docker 1회차
도커(Docker)란?
- Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플렛폼이다.
- 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하고, 이 컨테이너 안에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다.
데이터나 프로그램을 독립된 환경에 격리해야하는 이유?
- 대부분의 프로그램은 단독으로 동작하는 것이 아닌 실행환경이나 라이브러리, 다른 프로그램과 함께 동작한다.
- 소프트웨어 또한 여러 개의 프로그램으로 구성되어 있으므로 다른 프로그램과 공유하는 폴더 또는 설정 정보를 저장하는 경우가 있다.
- 만약 프로그램 하나를 업데이트하면 다른 프로그램에도 영향을 미치게 될 수 밖에 없다.
- ex) 멀쩡히 돌아가는 파이썬 프로그램이 관련 라이브러리 1개의 업데이트 만으로도 해당 파이썬 프로그램이 돌아가지 않을 수도 있다!
프로그램의 격리
- 여러 프로그램이 한 서버에서 실행되면서 발생하게 되는 문제들을 해결할 수 있다.
- 도커는 완전히 독립된 환경이므로 여러 컨테이너에서 같은 프로그램을 실행할 수 있다.
서버의 2가지 의미
기능적 의미의 서버
- 흔히 표현하는 웹 서버, 메일 서버 와 같은 의미의 서버
물리적 컴퓨터로서의 서버
컨테이너를 이용해 여러가지 서버 기능을 안전하게 함께 실행하기
- 도커 환경에서 컨테이너를 사용하면 프로그램을 완전히 격리시킬 수 있으므로 한 대의 서버에서 여러 개의 기능 서버를 실행했을 때 나오는 문제점들을 도커를 사용함으로서 각각 독립적인 환경에서 안전하게 운용할 수 있도록 만들어준다.
도커의 동작 원리

- 물리 서버가 있고, 서버에서 동작하는 운영체제가 있는데 원래 일반적인 서버라면 운영체제 위에 프로그램이나 데이터가 직접 올라가지만, 도커는 운영체제 위에 도커 엔진이 동작하고 그 위에서 컨테이너가 동작한다.
Docker Container
- 컨테이너 안에 포함되는 OS 이미지에는 커널이 없고, Host 커널을 공유하여 사용한다.
- 따라서 컨테이너는 각 application마다 OS를 필요로 하지 않아 서버를 더 효율적으로 만들 수 있다.
도커 허브와 이미지, 그리고 컨테이너
이미지와 컨테이너
- 이미지는 컨테이너를 만들 수 있는 틀 과 같은 것이다.
- 이미지는 하나만 있으면 여러 개 복제할 수 있어서 배치하기가 편하다.
- 컨테이너로 이미지를 다시 만들 수 있다. 이 뜻은 컨테이너 상태에서 수정을 할 수 있다는 말이다.
- 이미지만 있으면 도커 엔진이 설치된 공간에서는 어디서든지 이미지를 이용하여 컨테이너를 생성할 수 있다.
도커 허브
- 다양한 공개 컨테이너가 이미지가 있는 곳이다.
- 설정이 완료된 원하는 이미지를 가져다가 사용하면 된다.
- 안전하지 못한 이미지가 있을 수 있으므로 공식 이미지를 사용하는 것을 권장한다.
도커 컨테이너 생애주기와 데이터 저장
도커 컨테이너 생애주기
- 한 컨테이너는 오래 사용하기보다 새 버전이 나올 때마다 갈아타는 것이 좋다.

1. 생성
2. 시작
3. 중지
- 현재 동작하고 잇는 작업을 종료하고 컨테이너를 중지시킨다.
4. 삭제
데이터 저장
- 컨테이너를 삭제했을 때 안에 남아있는 데이터는 도커에 설치된 물리적 서버의 디스크를 마운트하여 이 디스크에 데이터를 저장하게 된다.
- 따라서 컨테이너가 삭제되면 실제 데이터는 컨테이너 외부에 있으므로 안전하게 저장되게 될 뿐만 아니라 다른 컨테이너가 데이터를 공유할 수 있게 되어 편리하다.
도커의 장단점
도커의 장점
- 한 대의 물리 서버에 여러 대의 서버를 띄울 수 있다.
- 격리된 환경에서 실행되어 각각 안전한 상태로 실행이 가능하다.
- 같은 소프트웨어를 여러 개 실행이 가능하다.
- 가상화 기술에 비해 가볍다.
- 서버 관리가 용이하다.
도커의 단점
- 리눅스용 소프트웨어만 지원이 가능하다.
- 호스트 서버에 문제가 생기면 모든 컨테이너에 영향을 미친다.
- 장기간에 걸쳐 하나의 컨테이너를 사용한다면 장점이 희석된다.
도커의 주 용도
- 모두에게 동일한 개발환경을 제공
- 새로운 버전 테스트 용이
- 컨테이너에서 테스트 할 경우 격리되어 있으므로 다른 컨테이너들이 영향을 받지 않음
- 동일한 서버가 여러 대 필요할 경우
- 한 대 물리 서버에 동일한 서버를 여러 개 만들 수 있으므로 관리가 간편하고 비용이 절약됨.