DevKim

VM과 도커(Docker) , GCP 인스턴스에서 도커 실행시키기 본문

Infra & Devops

VM과 도커(Docker) , GCP 인스턴스에서 도커 실행시키기

on_doing 2021. 8. 7. 21:37
728x90

 프로젝트에서 도커를 사용하기 전에, 도커가 뭔지 왜 사용하는지를 먼저 이해해보자

 도커를 이해하기 전에 VM의 개념을 정확히 잡고 Docker와의 차이점을 알아보자


[ Virtual Machine ]

1. VM (Virtual Machine )

- VM은 말 그대로, 물리적인 컴퓨터 위에 가상 운영체제를 여러개 띄우는 방식이다.

- VM은 운영체제와 응용 프로그래밍 사이에서 작동하는 프로그램으로,

가상머신을 설치하면 응용프로그램이 모두 동일한 환경에서 작동하는 것 처럼 보인다.

 

2. PM (Physical Machine)

- 기본적인 서버의 구조로,

Physical Hardware 위에 Host OS가 올라가고 그 위에 여러가지 응용프로그램이 실행되는 형태이다. 


[ VM vs. Container ]

1. VM

- VM은 Host OS 위에 독립적인 Machine을 만들어서 그 위에 독립적인 Guest OS를 동작시킨다.

VM은 각각의 OS를 포함하기 때문에 용량이 매우 무겁고 Host OS와 Guest OS 사이에서 가상화 단계를 거치면서

오버헤드가 발생할 수 있는 등의 단점이 있다.

다른 Guest OS와 분리 독립된 공간과 자원을 할당받아 사용되기 때문에,

보안성 측면에서는 효율적이라고 할 수 있다고한다.

 

2. Container 

- 컨테이너는 하나의 Host OS에 Container를 가상화 시켜주는 SW(Docker)를 설치하여

그 위에 각각의 어플리케이션 환경들을 설치/운영하는 형태이다.

위의 이미지를 보면, Docker는 각각의 Docker 어플리케이션을 마치 '프로세스'처럼 다루고 있다.

어플리케이션들은 각각의 OS를 설치하는 것이 아니라,

하나의 Host OS위에서 자원만 공유하기 때문에 상대적으로 매우 가볍고

Container 이미지를 만들면 이 이미지에는 서비스와 서비스에 필요한 라이브러리들을 같이 묶어서 가지고 있기 때문에 docker와 같은 sw만 설치되어 있으면 다른 버전의 리눅스에서도 안정적으로 시스템을 구동시킬 수 있게 되는 것이다.

 

* IAC = Infrastructure as Code

도커는 도커파일이라는 파일에 운영체제, 실행 명령어를 저장해두고 실행하면 항상 동일한 환경이 구성된다,

즉 더이상 인프라를 설정하느라 삽질하지 않아도 된다는 것이다.


[ GCP 인스턴스 생성 후 도커 실행 ]

- 매번 프로젝트 때마다 AWS만 사용하다가 이번에 GCP를 처음 사용해보았는데,

가장 큰 장점은 putty를 사용하지 않고도 웹에서 바로 SSH를 사용할 수 있다는 점이었다.

 

HTTP와 HTTPS의 트래픽을 허용 여부를 체크할 수 있는데,

이때 HTTP는 80번 포트가 열리고 HTTPS는 443번 포트가 열리게 된다.

 


이제 GCP 인스턴스를 생성하고

GCP 인스턴스에서, 도커 컨테이너를 올려서 실행해보자 🏃

 

 

인스턴스 생성 후 쉘이 실행되면, 먼저 도커를 설치

sudo yum install docker

도커 실행!

sudo systemctl start docker

도커 실행 후 localhost를 띄워 나온 getting start의 command를 복사해서 shell에서 실행시켜보자

docker run -d -p 80:80 docker/getting-started

위를 입력하면 권한이 없다는 에러가 뜬다. sudo를 입력해서 권한을 부여해주자

** well-known port ***

1024번 포트 이하에 있는 포트들

→ 이 포트들을 열 때에는 관리자 권한이 필요하다.

 

이렇게하면 docker desktop이 실행된다.

이후 GCP에서 생성한 인스턴스의 외부 IP로 접속해보면, 인스턴스 위에 올라간 getting started 페이지를 확인할 수 있다.

 

※ 그 외 명령어

1. docker에 실행되고 있는 포트 내리기

sudo docker ps
sudo docker stop [container id]

 

 

* 참고자료

- SSH란?

- Container와 VM의 차이점

728x90
Comments