아마 간단한 웹/소켓 서버가 필요한데 현재 윈도우 시스템이라면, 보통 가상머신으로 리눅스를 설치하기 위해 VMware나 VirtualBox를 많이들 사용하실 겁니다.
나쁘지 않은 방법이에요. 사실 (알려진 한) 지금껏 그 방법 외에는 윈도우라는 Host OS를 유지할 다른 방법이 없었어요.
근데 저런 가상머신의 문제점은, 쓸데없는 리소스 소모와 성능 저하가 너무 심하단 거예요. OS위에 다른 OS를 설치하는 방식이기 때문에 하나만 돌려도 시스템 과부하가 어마무시 합니다. 그래서 최근에 나온 CPU들은 아예 가상화 성능 개선 기술(명령어 집합)을 제공하긴 하죠, VT-d나 VT-x같은.. 그래봐야 Host OS 위에서 다른 OS 하나를 통으로 돌린다는 점은 바뀌지 않아요.
Docker는 조금 달라요. 커널을 공유합니다. 커널단에서 쓰이는 System Call을 공유하는 건지 뭔지는 모르겠는데(공유하는 것 같긴 합니다), 만약 Ubuntu 위에 Debian을 돌린다고 하면 Debian(Guest OS, Container)도 Ubuntu(Host OS)의 커널 자원을 공유해요.
커널 자원을 공유한다는 건 어마어마한 거예요. 자세히 기술하긴 어렵고(그렇게 자세히는 모릅니다 :D), 간단히 말해서 Guest OS들이 Host OS만큼의 성능을 발휘할 수 있어요. 커널 자원부터 공유하기 때문에 사용할 RAM도, CPU 자원도 정해주지 않아도 됩니다(찾아보니 정해줄 순 있네요). 커널에 붙은 하드웨어들을 포함한 모든 환경들을 공유한단 말도 되거든요. VMware, VirtualBox에선 Guest OS를 설치하면 그 가상 머신에 사용될 가상 하드웨어, 가상 커널을 위해 Guest OS에서 따로 드라이버들을 설치해야만 합니다. 하지만 Docker는 그럴 필요가 없어요.
Docker에 대해서 하고 싶은 말이 많지만 포스팅 주제에도 안 맞고, 개인적으로 더 공부해야 할 것 같네요. Docker는 이미 각광받고 있지만, 앞으로도 더 주목받고 발전될 것 같습니다.
Docker를 공부하면서 찾은 게 있어요.
일반적인 64bit 인텔/AMD 환경에서 돌리기 위한 간단한 LEMP 스택 패키지입니다. Nginx, PHP, MySQL을 각각 컨테이너로 실행해요. 저 사이트 주인이 풀 스택 웹/모바일 개발자라는데, 저 사이트 자체도 직접 디자인한 것 같구요. 대단한 친구.. 아무튼 이 패키지를 이용하면 아주 간단히, 시험용 웹 사이트를 Windows나 어디나 성능 저하 없이 열어재낄 수 있어요.
전 이걸 Docker 공부삼아 Github 소스를 Fork해 ARM용 MariaDB를 넣어놨습니다. Dockerfile 내용 중 Deprecated된 MAINTAINER 지시자도 바꿨구요.
이를 활용해 오드로이드(32비트)/라즈베리파이에서 간단한 LEMP 스택 설치 방법을 알려드릴게요.
이걸 활용하면 아래 패키지들을 통으로 사용할 수 있습니다.
- Nginx 1.13
- PHP 7.1
- MariaDB 10.0
먼저 git을 설치해야 합니다. 저장소를 복제해 사용해야 하거든요.
sudo apt install git
그리고 Github로부터 저장소를 복제해 가져와요.
git clone https://github.com/awesometic/docker-armhf-lemp.git
cd docker-lemp-armhf
이제 Docker를 설치합시다.
sudo apt install docker docker-compose
Docker는 무조건 root 권한으로 실행되어야 합니다. 매번 sudo를 치기 불편하니, 자신의 계정에 대해 다음 작업도 해줍니다. 현재 접속 중인 사용자에 대해 docker 사용 시 자동으로 root 권한을 제공합니다.
sudo usermod -aG docker $USER
현재 접속중인 Shell을 종료 후 다시 시작해줍니다. 중요해요.
그리고 다시 복제된 디렉토리로 가 아래 명령어를 통해 설치/시작해줍니다.
docker-compose up
뭔가 싹 진행이 됩니다. 처음엔 좀 오래걸리니 기다려주세요.
설치가 완료되면 이렇게 뜹니다.
이제 저 서버 IP로 접속해보시면,
아주 간단하게 서버가 열린 걸 볼 수 있어요. 굉장합니다.
활용하기 위해 알아야 할 몇 가지 사항이 있습니다.
- "~/Projects" 디렉토리가 Nginx 서버 컨테이너의 "/code" 와 공유됩니다.
- "./nginx/default.conf" 파일은 Nginx 서버 컨테이너의 "/etc/nginx/conf.d/default.conf" 파일과 동기화됩니다.
- 기본적으로 설정되는 MariaDB의 사용자 정보는 docker/docker 이고, docker 라는 데이터베이스가 생성됩니다.
- MariaDB 컨테이너의 데이터베이스 데이터는 "./data/mysql" 에 공유됩니다.
- 80, 3306, 9000번 포트가 사용됩니다.
- 자세한 정보는 소스를 뜯어보세요 :)
- https://www.docker.com/
- https://docs.docker.com/
- https://wouterdeschuyter.be/blog/quick-guide-setting-up-php-71-nginx-110-mysql-57-with-docker-1327640418
- https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
- https://github.com/awesometic/docker-armhf-lemp
활용 예시도 준비 중입니다 :)
'Programming > Docker' 카테고리의 다른 글
Docker 불필요한 이미지들 한 번에 제거하기 (0) | 2019.08.05 |
---|---|
Docker 이미지 한 번에 업데이트하기 (latest 태그) (0) | 2019.05.20 |
Docker - ODROID Kernel Builder, 오드로이드 커널 빌드 간편화 이미지 개발/배포 (0) | 2019.03.05 |
Docker - h5ai, 개인 파일 사이트 이미지 개발/배포 (29) | 2019.01.11 |