-
Windows 10 환경에서 Docker 및 nginx로 웹 서버 구성하기 (1)DevOps, 클라우드/Docker & Kubernetes 2021. 1. 20. 21:05
새로운 마음으로 복학을 준비하면서 무언가 나만의 작업 공간, 개발 공간이 있다면 좋겠다는 생각이 들었다.
이전에는 "구글의 Blogger 서비스로 나름의 포스팅을 해보자" 라는 생각이 있었지만 오래가진 못했고 불편했다.
사실 요즘은 AWS등의 클라우드 환경을 이용한 웹 서버 등을 많이들 구성한다고 하더라.
나도 AWS를 이용하면 정말 좋겠지만 당장은 Docker를 이용하면서 기본적인 서버의 구동 요소 쯤은 알고싶었다.
그래서 고민해본 끝에 Windows 10 환경에서 Docker를 이용해서 나의 웹 서버를 구성해보고자 한다.
내 개인의 프로젝트라면 프로젝트고 공부라면 공부, 이마저도 아닌 그저 환경 구성이라면 구성이 될 것 같다.
나는 Docker에 대해서는 거의 무지한 상태이기에 하나씩 검색해가며 구성해보았다.
대부분의 포스팅이 리눅스를 이용하였기 때문에 윈도우 관련 내용만 찾아보는것도 살짝 귀찮았다.
이전에 docker를 사용해본 친구, 후배 등에게 이것 저것 물어보면서 시작하였다.
Docker의 구동 방식?
사실 이 글을 쓰는 지금도 잘 모르겠다. 정말 백지에서 시작했기에 어떻게 돌아가는가? 를 아는게 첫번째 과제인 것 같다. 그러므로 초보자의 시야에서 내가 보고 들은 것을 적어볼 것이다.
Docker, 도커는 리눅스 기반의 시작한 '컨테이너를 이용한 가상화 플랫폼' 이라고 한다.
가상화 플랫폼, 기존의 VMware나 Virtual box 등에 우분투, 칼리나 기타 OS 등 iso 파일로 올려 사용하던 것과 유사하다.
이렇게 VM으로 올려버린 가상 OS들은 격리 환경에 커널까지 전부 올라가기에 호스트의 자원을 크게 잡아먹는다.
반대로 컨테이너는 앱과 앱의 동작에 필요한 요소들만을 '패키징'하여 격리, 실행하기에 호스트의 자원을 좀 더 작고 원활하게 차지한다. 쉽게 말해서 가볍다.
이에 대한 이해는 아래 문서를 바탕으로 하였다.
https://docs.microsoft.com/ko-kr/virtualization/windowscontainers/about/containers-vs-vm
또한 레이어 시스템을 활용한다고 한다. 이미지 관리에 있어서 필요한 것들을 레이어 환경으로 집어넣는 방식인 것 같다.
기본 바탕이 되는 레이어에 내가 필요로 하는 프로세스나 앱들을 넣으면 되는데 나는 nginx기반의 웹 서버를 구동할 것이기에 [기반 레이어 + nginx + 웹 서버에서 돌아가는 앱] 이런식으로 층층이 구현할 수 있다.
이 레이어를 통한 이미지 구성은 Dockerfile에 DSL 언어를 사용하여 이미지 구성을 순차적으로 적는다고한다.
리눅스에서 하나씩 apt-get install 하던 것을 패키지화 하는 것 같다. 내가 필요한 것만 적어놓으면 그것이 하나의 이미지에 대한 나만의 법칙이 된다. 좋다.
어쨌건 하나씩 만져보면서 최종적으로 나만의 이미지를 완성하고 이를 구동하면 된다.
컨테이너와 이미지
나는 이것을 인스턴스와 객체 그리고 클래스의 관계 라고 이해했다. 도커에 올리는 이미지에는 많은 종류들이 있을 것이다. 이런 '이미지들의 집합' 클래스에서 한개의 이미지를 뽑아내면 그것이 객체가 될 것이고 이 뽑아낸 이미지를 실제로 나의 입맛에 맞게 설정하고 구동하면 그것이 컨테이너라는 인스턴스가 될 것이다.
Docker Desktop
리눅스의 오픈소스로 시작한 도커는 현재는 윈도우와 맥 환경도 지원한다. 다만 리눅스 기반이기에 결국 그 틀을 아주 벗어나진 않은 것 같다.
https://www.docker.com/products/docker-desktop
위 링크에서 Docker Desktop을 설치할 수 있다. 설치를 마치고 실행하면 아마 한가지 에러가 등판할 것이다. WSL 2 Linux kernel 관련 오류를 확인할 수 있는데 팝업된 에러 메시지의 링크를 따라가 커널 업데이트만 해준다면 해결된다. WSL은 윈도우에서 리눅스를 깡으로 올릴 수 있는 또 다른 가상화 환경인 것 같다.
여기서 잠깐 다른 이야기를 해본다면 윈도우10에는 하이퍼v, 하이퍼 바이저라는 가상화 기술을 지원하더라.
이 기술이 다른 OS에도 있는지는 잘 모르겠지만 WSL이던 VM이던 한가지 가상화 플랫폼이 하이퍼 바이저를 차지하면 나머지 플랫폼은 그 호스트에서 사용할 수 없다. 나도 WSL 설치 후 VM이 구동이 안되서 그냥 지워버렸다.
도커 설치 후 간단한 명령어로 확인을 해보았다. 세부적인 명령어는 이 후에 추가적으로 다루겠다.
docker images
윈도우 파워쉘에 docker images라는 명령어를 실행한 결과다. 나는 이미 이미지를 두개 당겨왔기 때문에 nginx와 ubuntu가 나오지만 아무것도 안나오는게 정상이다. nginx 환경을 구성할 것이기에 아래의 명령어로 nginx를 당겨와보자.
docker pull nginx
위 명령어를 실행하고 다시 docker images로 확인하면 1번 이미지처럼 nginx 이미지가 생긴 것을 볼 수 있다.
이제 이것을 '컨테이너'에 올려야한다. 이미지는 객체라고 이해했으니 이를 인스턴스화 해야한다.
docker run -d --name 컨테이너명 -p 호스트포트:포워딩포트 nginx docker run -d --name nginx_1 -p 8000:80 nginx
이런식이다. 각각의 옵션을 간단히 알아보자면 -d는 백그라운드 실행, --name 컨테이너명은 내가 설정할 컨테이너의 이름, 마지막으로 -p는 호스트pc의 포트와 도커 위의 컨테이너의 포트를 포워딩 해주는 것이다. 마지막의 nginx는 당연히 내가 사용할 이미지의 이름.
docker ps docker ps -a
이후 위 명령어로 현재 구동중인 컨테이너와, 내가 만든 모든 컨테이너를 확인할 수 있다.
구동 중인 컨테이너를 확인하고자 한다면 호스트의 8000번 포트에서 컨테이너의 80번으로 포워딩 해주었으니
http://localhost:8000 으로 확인해보자.
나중에 다시 시작하고자 한다면?
docker start 컨테이너명 docker stop 컨테이너명 docker rm 컨테이너명 docker rmi 이미지명
이 명령어들로 간단하게 도커를 시작 또는 종료할 수 있고 필요하면 삭제도 할 수 있다.
'DevOps, 클라우드 > Docker & Kubernetes' 카테고리의 다른 글
라즈베리파이를 이용한 멀티 노드 클러스터링 (4) - Spring Boot (0) 2022.04.06 라즈베리파이를 이용한 멀티 노드 클러스터링 (3) - MySQL (0) 2022.04.05 라즈베리파이를 이용한 멀티 노드 클러스터링 (2) - 쿠버네티스 명령어 (2) 2021.08.15 라즈베리파이를 이용한 멀티 노드 클러스터링 (1) - 설치 (1) 2021.07.23 Windows 10 환경에서 Docker 및 nginx로 웹 서버 구성하기 (2) (1) 2021.01.27