Docker
Docker는 VMware나 Virtualbox 등의 가상화 기술과 비슷하다. 이런 가상화 소프트웨어는 주로 OS를 통째로 돌리는데 사용을 했다. 하지만 Docker는 가상화 소프트웨어와는 달리 OS를 통째로 가상화하지 않고, 실행 환경만 분리하여 제공함으로써 가볍고 효율적으로 작동한다. (출처)
OS의 내부는 물리적 자원을 관리하는 ‘커널 공간 “과 사용자 프로세스 (애플리케이션)을 실행하는”사용자 공간 “으로 나뉩니다. 컨테이너 형 가상화는 사용자 공간을 여러 개로 나누어 각각의 사용자 프로세스에서 보이는 리소스를 제한하는 것임.
Docker의 컨테이너는 Virtual machine과 같이 하나의 온전한 서버를 제공하는 것이 아니라 명령을 실행하는 환경만 제공하고 그 명령을 실행할 뿐이다 1)
리눅스의 LXC라는 컨테이너 기술을 좀 더 편하게 만든 프로젝트가 Docker 임.
VMware, Virtualbox, 페러렐즈 같은 것은 맥이나 리눅스 위에서 윈도우를 설치하고 인터넷 뱅킹 등을 할 때 많이 사용하는데 Docker는 이런 용도로는 쓸 수가 없다.
장점
다른 가상 머신에 비해서 성능 손실이 매우 적기 때문에 서버에서 유용하게 활용된다. 예를 들면 아파치+PHP+웹 소스를 Docker 이미지로 묶어 놓은 뒤 서버에서 이미지를 컨테이너로 실행만 하면 된다. 서버 세팅을 이미지로 만들어서 반복 작업을 자동화하는 것이다. 물론 Docker 이미지는 인터넷으로 주고 받을 수 있다.
특히 요즘 많이 사용되는 클라우드에서 가상 서버는 시간당 돈을 내기 때문에 서버를 적게 쓰는게 유리함. 그래서 Docker로 이미지를 만들어 놓은 뒤 사용량이 많을 때만 서버를 띄우고, 사용량이 줄어들면 서버를 삭제하는 Auto Scaling에 적합함.
리눅스를 사용하다 보면 소스를 컴파일해서 설치하거나, 패키지를 설치할 때가 많다. 이게 점점 쌓이면 컴퓨터가 떡이된다. 지우는 것도 쉽지 않고 설정해놓은게 꼬이면 아주 귀찮아진다. 그래서 서버서 설정이나 개발 환경을 Docker에서 테스트해보는 것이다. 잘되면 이미지로 만들고 안될때는 삭제하면 그만임.
VMware, VirtualBox 등의 가상 이미지와 스냅샷은 용량이 크지만, Docker는 몇 십메가에서 몇 백메가 수준임. 원한다면 10메가 이내로 이미지를 만들 수도 있다.
VM의 단점
- 불필요한 기능의 중복- 호스트 OS와 게스트OS 간의 기능 중복
- 상대적으로 무겁다. 오버헤드(15~20%) 정도. 일반적으로 리눅스설치와 하이퍼바이저를 통해 설치 한 것이 15%정도 차이난다.
- 배치(Deployment)의 어려움 -동시에 수십개를 설치하는 것이 어렵다.
단점
OS자체를 올리는 것이 아니기 때문에 윈도우 컨테이너를 지원하지 않는다. 맥 혹은 리눅스 → 도커 → 윈도우 이런 용도로는 쓸 수가 없다.
윈도우용 도커는 윈도우에 Virtualbox를 올리고, 이것에서 도커를 실행한다;
MS에서 차기 윈도우 서버에 Docker를 지원하겠다고 발표를 했다. 이렇게 되면 윈도우(호스트)-윈도우(컨테이너) 모양으로 실행할 수 있을 것이다.
WSL2를 통해 윈도우 또한 VM을 거치지 않고 Docker를 활용할 수 있게 되었다.
설치
https://docs.docker.com/install/linux/docker-ce/ubuntu/
도커의 판본은 커뮤니티 버전의 docker-ce와 엔터프라이즈 docker-ee로 나뉜다. 우분투에서는 겹치는 이름을 피하기 위해 패키지 이름이 docker.io였다.
설치하려면 docker-ce를 설치한다.
구판 삭제
혹시 구판이 설치되어 있다면 삭제한다.
sudo apt-get remove docker docker-engine docker.io
레포지토리 설정
기본 패키지 확인… 대개는 이미 깔려있댜.
sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-common
키추가
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable"
sudo apt-get update
sudo apt-get install docker-ce
실행
docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
다음은 자주 사용하는 옵션들임.
옵션 설명 -d detached mode 흔히 말하는 백그라운드 모드 -p 호스트와 컨테이너의 포트를 연결 (포워딩) -v 호스트와 컨테이너의 디렉토리를 연결 (마운트) -e 컨테이너 내에서 사용할 환경변수 설정 –name 컨테이너 이름 설정 –rm 프로세스 종료시 컨테이너 자동 제거 -it -i와 -t를 동시에 사용한 것으로 터미널 입력을 위한 옵션 –link 컨테이너 연결 [컨테이너명:별칭]
docker ps
https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html
Portainer
Stacks
Stack은 두개 이상의 컨테이너가, 같은 내부영역에 묶여서 하나의 응용프로그램을 구현하는 묶음을 이야기 한다고 생각하면 간단함. 예를 들어, 웹사이트에서 많이 사용하시는 제로보드의 경우, Apache와 Mysql이 필요함. 하나의 Container로 구성할 수도 있지만, Apache용 Container와 Mysql용 Container를 묶어서, 만드는 것도 가능함. 전자의 경우가 제로보드 Container 후자의 경우가 제로보드 Stack이 되겠다.