Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.
Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.
Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.
https://aws.amazon.com/ko/docker/
이 완전히 독립적인 OS들은 서로를 알지 못하며 host OS도 알지 못한다.
👍 장점 : Hypervisor을 사용한다면 물리적인 서버의 자원을 더 효율적으로 사용이 가능하다.
하나의 OS를 통해 한 서버만 운영한다면 서버가 가진 자원들을 꽉꽉채워 사용하기 어렵기 때문에 자원이 낭비될 수 있다. 때문에 hypervisor를 통해 가상화를 사용한다면 하나의 서버에 여러 OS를 실행시켜 필요한 OS나 서비스에 자원을 할당할 수 있기때문에 자원을 훨씬 효율적으로 사용하게 된다.
👎 단점 : 자원들을 너무 많이 사용한다.
독립적인 OS를 실행하는 것이기때문에 부팅시간이 길어지며 자원을 많이 사용한다.
docker의 container는 OS의 커널 위의 유저 공간에서 실행된다.(유저 공간을 가상화한다.)
Docker Engine 하나가 Hypervisor와 Guest OS의 역할을 대신해줄 수 있는 것이다.
👍 장점 : 가볍게 실행이 가능하다.
docker image만 있다면 어디서든 쉽고 빠르게 환경을 설정해 배포가 가능하다.
👎 단점 : 독립적인 OS가 아닌 유저 공간을 가상화하는 형태
유저 공간을 가상화하다 보니 운영체가가 다른 host에서는 실행 시킬 수 없다.
ex) windows를 linux 호스트에서 실행시킬 수 없다.
완전히 독립적이지 않은 가상화이기 때문에 보안적인 측면에선 Hypervisor보다 약하다.
구성 단순화
Docker는 하나의 Configuration으로 모든 플랫폼에서 실행할 수 있다.
Configuration 파일을 코드에 넣고 환경 변수를 전달하여 다른 환경에 맞출 수 있다.
따라서 하나의 Docker 이미지를 다른 환경에서 사용할 수 있다.
코드 관리
Docker는 일관된 환경을 제공하여 개발을 훨씬 편안하게 만들어준다.
Docker 이미지는 변경이 불가하기에 개발환경에서 운영 환경까지 애플리케이션 환경이 변경되지 않는 이점이 존재한다.
개발 생산성
향상 개발 환경을 운영 환경에 최대한 가깝게 복제할 수 있다.
Docker를 사용하면 코드가 운영 환경의 컨테이너에서 실행될 수 있으며 Docker는 오버 헤드 메모리 용량이 적기에 여러 서비스를 실행하는데 도움이 된다.
또한 Docker의 Shared Volume을 사용하여 호스트에서 컨테이너의 어플리케이션 코드를 사용할 수 있도록 할 수 있다.
이를 통해 개발자는 자신의 플랫폼 및 편집기에서 소스 코드를 편집할 수 있으며 이는 Docker내에서 실행 중인 환경에 반영된다.
출처:
https://kibua20.tistory.com/135
https://liebe97.tistory.com/3