티스토리 뷰

이전 게시글을 응용하여 Local 컴퓨터가 아닌 원격 클라우드에 웹서버를 띄워보도록 하겠습니다.

 

https://kibbomi.tistory.com/220

 

[Docker/Web server] Docker에서 웹 서버 띄우고 접속하기(Docker toolbox, Win7, Win10 home)

docker로 호스팅 할 일이 생겨서 외부에서 접속하는 방법을 알아보다가 다른 분들께 도움이 되고자 글을 남깁니다. 내 Docker의 Container에 접속할 수 있는지 체크해보는 방법 중 가장 간단한 게 웹서

kibbomi.tistory.com

 


0. 들어가기에 앞서..

 Cloud는 코엑스에서 MS가 주최하는 Azure 강좌라고 할까.. 강연하실 때 말고 실제로 사용하는 것이나 사용해본 적이 없는데 구글도 나름 직관적이고 좋았다.

오늘 처음 사용해봤는데 크게 어려운 점은 없었다. 그런데 간단한 기능만 사용해서 그렇지 좀 상세한 부분까지 건드리게 된다면 어려울 듯하다 ㅠ..

 

일단, Microsoft의 팬..? 이므로 다음에는 Azure을 쓰지 않을까 싶다(물론 개인적으로만.). 통계는 보지 않았지만 체감상 AWS (Amazone Web Service)를 가장 많이 쓰는 듯하다. GCP(Google Cloud Platform)는 300$크레딧을 주기 때문에 학생 신분으로 접근하기에 정말 좋다(근데 1년 아니었나..? 90일이네요.).

 

Docker를 쓴 이유는 아무래도 배포가 정말 정말 간단해진다는 점. 간단하다는 것의 의미는 빠르고, 실행환경에 큰 영향을 주지 않아 발생할 오류가 적다는 점이다. 같은 image를 사용하면 docker를 사용하지 않는 방법에 비해서 오류로 인해 잡아먹는 시간이 대폭 줄게 된다.

 

Docker로 웹서버를 띄우려고 하시는 분, 게다가 클라우드에 띄우려고 하시는 분들은 이런 장점들은 다 알고 계실 거라 생각하기 때문에 여기서 마무리하고 본론으로 들어가겠습니다.

 

 

1. 인스턴스 생성하기

인스턴스는 하나의 VM(Virtual Machine)이라고 생각하면 참 좋다. GCP 컴퓨팅 자원의 일부를 아주 손쉽게 빌릴(사용할) 수 있는 방법이다.

VM의 장점이 물리적 자원을 가상화해서 여러 개로 쪼개서 쓸 수 있다는 것! (마치 여러 개 인 것처럼)

 

 

그림 1. 인스턴스 만들기

저기 위 빨간 박스를 클릭해서 인스턴스(VM)를 만들자.

 

그림 2. 설정

이름은 원하는 이름 아무거나 작성.

 

리전(Region)은 Server의 물리적 위치이다.

아메리카, 유럽, 아시아 등등 마음에 드는 곳, 필요한 지역으로 선택하면 된다.

영역은 크게 차이가 없는 듯하다..?

 

그림 3. CPU, RAM, OS

이제 서버의 중요한 부분인 성능을 결정하는 부분.

간단한 웹서버를 띄울 것이기 때문에, E2조차도 필요 없다.

N1의 f1-micro를 선택해주자. (다른 것 선택해도 됨. 단, 상대적으로 비쌈)

 

f1-micro는 vCPU 1개, 614MB 메모리를 갖고 있다. (눈물)

 

그리고 부팅디스크,

Linux계열을 쓸 예정이다.

정말 많은 종류가 있다.

기본적으로 debian이 설정되어있는데 이건 써본 적이 없어서 pass..

그림 4. OS 종류

Red Hat Linux, CentOS, Fedora, Ubuntu는 써봤다. 그래서 친숙한 Ubuntu를 선택했다.

버전도 고를 수 있는데 18.04 LTS버전을 선택.

 

방화벽은 HTTP, HTTPS 트래픽 모두 허용해 주었다.

 

이렇게 인스턴스 1개 생성 끝!

 

 

2. Docker 설치

docker 설치하는 것은 기존 ubuntu os 컴퓨터에서 설치하는 방식과 완전 똑같다.

 

그림 5. SSH 접속

만들었던 인스턴스에 접속하기 위해 SSH를 사용한다.

옆의 삼각형 모양을 클릭하고 브라우저 창에서 열기 버튼을 누르면 SSH로 접속을 할 수 있다.

 

https://docs.docker.com/engine/install/ubuntu/

 

Install Docker Engine on Ubuntu

 

docs.docker.com

 

위의 링크를 따라가서 설치를 진행하시면 됩니다.

docker --version

를 입력했을 때, 버전명이 나오면 다운로드 성공!

 

3. Container 생성

이제 nginx 이미지를 다운로드할 차례이다.

 

혹시 명령어를 입력하는데 docker에 대해서 권한이 없다고 뜨면 docker그룹에 넣어주면 된다.

(/var/run/docker.sock 권한 오류, permission denied)

다음 명령어를 입력해서 docker group에 추가해주자

sudo usermod -aG docker $USER

(입력하고 재부팅 해보자. 그리고 id 명령어를 입력하면 docker가 보일 것이다.)

 

이전 글에서 사용했던 명령어를 그대로 사용할 예정!

docker run -d -p 9876:80 --name MyWeb nginx

 

run : 실행, Image가 없다면 다운로드함.

-d : detach, background로 실행

-p : port넘버 지정, 외부:내부, 외부는 외부에서 접근할 때 쓰는 것이고 내부는 내부 프로그램에서 어떤 포트를 쓰는지 지정. docker가 외부 -> 내부로 전송해줌.

--name MyWeb : container이름을 내 맘대로 설정.

nginx : nginx이미지를 사용하겠음을 의미. latest버전을 사용.

 

이 명령어를 입력하면 다운로드를 자동으로 진행하고,

docker ps -all

명령을 입력하면

그림 6. 실행중인 컨테이너

이렇게 nginx(MyWeb) 컨테이너가 실행 중인 것을 잘 볼 수 있다.

 

이제 인스턴스의 외부IP:nginx외부port를 내 컴퓨터의 웹 브라우저 주소창에 입력하면 nginx 초기창이 뜰까???

 

아쉽지만 아직 하나 더 세팅할 게 남았다.

inbound 포트를 열어주지 않았다는 점!

 

만약 지금 이 상태에서 인스턴스의 외부IP:nginx외부port 를 입력해주면 인스턴스까지는 도달하나, container까지는 도달하지 못한다.

 

4. 방화벽 설정

그림 7. 방화벽 규칙 설정

빨간 박스 부분을 클릭해서

그림 8. 방화벽 규칙 만들기

방화벽 규칙을 만들자.

 

생각해둬야 하는 것은

위 docker container의 외부 포트를 9876으로 해주었다는 점이다. 이건 내 맘대로 해도 됨!

 

그림 9. 방화벽 규칙 설정

이름은 중복되지만 않게 마음대로 작성하면 된다. 설명은 부가적인 거고..

로그는 비용이 증가할 수 있다고 하므로 cut!

네트워크나 우선순위는 건드리지 않았습니다. 근데 변경해도 큰 상관은 없어 보입니다.

트래픽 방향은 수신으로, 일치 시 작업은 허용 그대로 했습니다.

 

 

그림 10. 방화벽 규칙 만들기

소스 IP범위입니다.

IP 0.0.0.0/0은 INADDR_ANY와 비슷한 건가요..?(비슷한데 비슷하다고 단정은 못 짓겠습니다 ㅠ. '정확'하게 아는 게 아니니까ㅠㅠ.)  여튼 어떤 IP 든지 모두 다 받겠다는 의미이다.

IP주소가 1.2.3.4인 어떤 유저가 접속해도 허용,

IP주소가 5.6.7.8인 어떤 유저가 접속해도 허용, 123.123.123.123인 유저가 접속해도 허용한다.

 

그런데 특정 IP, 예를 들어 집에 있는 내 노트북의 IP가 1.2.3.4라고 하자. 이때는 꼭 외부 IP주소!

내 노트북만 접속할 수 있도록 하고 싶을 때, 위의 소스 IP 범위에 1.2.3.4라고 기재해주면 IP가 1.2.3.4인 패킷만 해당 방화벽을 통해 내부로 들어올 수 있다.

테스트 환경이기 때문에, 여기서는 제 외부 IP주소를 기재해 주었습니다.

 

nginx는 TCP를 사용하고 80번 포트를 사용한다.

그런데 docker에서 외부 포트를 9876으로 열어주었기 때문에, 우선 9876번 포트로 진입 후 docker가 80번 포트를 사용하는 nginx 컨테이너에게 전달해준다.

 

그리고 만들기 클릭!

 

그러면 그림 8에 작게 보이는 nginx처럼 규칙이 추가된다.

 

5. 결과

 

그림 11. 웹서버 접속

이렇게 인스턴스의 외부IP주소:nginx외부 포트번호를 사용해서 웹서버에 접속할 수 있다.

웹서버를 띄울 수 있으면 응용해서 충분히 docker로 다른 프로그램도 배포할 수 있다고 생각합니다^^

 

 

 

 

틀린 부분이 있으면 언제든지 댓글 바랍니다!

댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday