1. Docker 란?
Docker란 컨테이너를 생성하고 관리하기 위한 도구이다. 여기서 컨테이너란 표준화된 소프트웨어 유닛을 말한다.
기본적으로 해당 코드를 실행하는데 필요한 종속성과 도구가 포함된 패키지라고 보면 된다. 컨테이너라는 곳에 우리가 개발을 한 환경 자체를 넣어버리고 그 환경을 다른 곳에서 불러오면 문제없이 동일하게 사용할 수 있다.
2. 컨테이너가 왜 필요한가?
소프트웨어에서 왜 독립적인 표준화된 애플리케이션 패키지를 원하는지에 대한 이유를 생각해보면 컨테이너의 중요성을 좀 더 정확하게 깨닫게 된다. 도커의 주요 사용 사례 중 하나는 우리가 종종 다른 개발 제품 생산 환경을 가지게 될 때 환경 별로 관리하기 위한 사례인데,
예를 들어 Node js 버전이 14.3인 환경에서
다음과 같은 코드를 짰을 때 에러가 뜨는 것을 확인할 수 있고 이에 따라 우리는 14.13 보다 높은 버전이 필요한 것을 알게 된다.
이와 같이 버전 문제로 인해 문법에 에러가 뜨는데 우리가 사용할 수 있는 환경이 로컬밖에 없다면 이 코드는 아예 사용할 수 없을 것이다.
그렇다고 코드 자체를 버리기엔 애매한 상황이 있을 때 우리가 로컬 환경 자체를 바꾼다고 해서(Node js 버전 업그레이드 등)는 상당한 소요가 필요할 것이다. (이 코드 뿐만 아니라 다른 곳에서 에러가 뜰 수도 있기 때문에)
이 때 애플리케이션이 자체적으로 필요한 Node 버전을 제공하는 컨테이너를 사용한다면 테스트를 해보기에 훨씬 편리할 수 있다.
물론 프로젝트가 몇 개 안되고 모든 프로젝트가 하나의 버전을 똑같이 사용한다면 별로 필요가 없겠지만, 큰 회사에서 복잡한 프로젝트들이 여러개 있을 경우 각각의 프로젝트에 적합한 버전이 있을 수도 있을 것이고, 그 복잡한 프로젝트를 똑같은 버전으로 만드는 것 자체가 큰 일이 될 수도 있다고 생각되었다. 그럴 때 컨테이너를 여러개 만들고 버전별로 관리하면 상당히 유용할 것이다.
3. 가상 머신과 도커 컨테이너의 차이점?
물론 위의 상황이 있을 때 가상머신으로도 버전 별로 프로젝트를 관리하는 것은 가능하다. 하지만 가상 머신을 사용할 때 가장 큰 문제점은 오버헤드이다. 컴퓨터 안에 컴퓨터를 집어넣는 행동을 여러번 반복하다보면 메모리, cpu, 내 하드 드라이브의 공간을 낭비하게 될 것이고 컴퓨터는 계속 무거워지고 나중엔 오버헤드가 발생할 것이다. 실제로 학생 때 가상 머신을 사용해봤는데 가상 환경을 한 개만 만들었어도 컴퓨터 성능이 별로 좋지 않으면 내 컴퓨터 자체가 느려지는 것을 볼 수 있었다. 이에 비해 컨테이너는 자체에 OS를 가지고 있고, 가상 머신보단 훨씬 가벼운 느낌이 있다.
4. Windows 에서 도커 설치하기
https://typo.tistory.com/entry/Docker-in-Windows?category=896128
5. MacOS 에서 도커 설치하기
https://www.docker.com/products/docker-desktop/
해당 사이트에서 다운로드 받으면 된다.
'DevOps > Docker' 카테고리의 다른 글
Docker | 이미지 & 컨테이너(2) | 관리하기 (0) | 2022.05.31 |
---|---|
Docker | 이미지 & 컨테이너(1) | 이미지란? (0) | 2022.05.31 |
Docker | MongoDB | mongod: unrecognized service (0) | 2021.11.02 |
Docker | bash: sudo: command not found (0) | 2021.10.28 |
Docker | Windows | Dockerhub (0) | 2021.10.12 |