Docker 사용의 장점
서버쪽에서 배포얘기하면 빠질 수 없는 도커, ,
사람들은 도커를 왜이렇게 많이 쓸까 ?
현업에서 가장 많이 사용되는 가장 큰 이유는 이식성에 있다.
이식성 : 특정 프로그램을 다른 곳으로 옮겨서 설치 및 실행할 수 있는 특성
지방 관공서 SI업무 위주로 일하는 나로써는 도커를 접할일이 거의 없긴했지만 (관공서는 젠킨스를 많이 쓴다)
자체서비스 개발하는 곳이나 서울 개발자들은 프론트만 인텔리제이 + 깃으로 형상관리하고
백단은 다 도커로 소스 올리고 받아서 모두가 도커를 사용할줄 안다는 무시무시한 소문을 들었다(웅성웅성 .. )
각설하고 , 도커를 사용하면 이식성이 가장 큰 장점이고 그에 따라오는 장점들이 있다.
- 매번 귀찮은 설치 과정을 일일이 거치지 않아도 된다.
- 항상 일관되게 프로그램을 설치할 수 있다. (버전, 환경 설정, 옵션, 운영 체제 등)
- 각 프로그램이 독립적인 환경에서 실행되기 때문에 프로그램 간에 서로 충돌이 일어나지 않는다.
IP 와 Port
IP
네트워크상에서의 특정 컴퓨터를 가리키는 주소
Port
한 컴퓨터 내에서 실행되고있는 특정 프로그램의 주소
❓ 외부에서 특정 컴퓨터 내부에 있는 SpringBoot 라는 서버에 통신을 하고싶을경우
-> 외부에서 IP주소만 알고있기때문에 실행되고있는 여러 프로그램중 어떤 프로그램과 통신을 해야할지는 모른다.
그래서 특정 서버와 통신할때는 IP주소와 서버가 실행되고있는 포트번호까지 알고있어야 한다.
❓브라우저 창에 포트번호를 입력하지 않는 이유
-> 위에 적은 내용과 같이 특정 서버와 통신하기 위해서는 IP 주소와 포트번호를 알아야 한다고 했다.
그런데 naver.com , google.com 등 우리가 입력하는 도메인은 서버를 따로 입력해주지 않았는데 어떻게 정상적으로 통신한걸까?
그건 우리가 도메인주소를 입력해서 엔터를 누르면, 브라우저는 기본적으로 80번 포트로 통신을 보내게 설정되어있다.
그래서 포트번호를 입력해주지 않아도 통신이 잘 됐던 것이다 !
만약 3000번 포트로 통신하고싶다면 naver.com:3000 으로 주소창에 입력해야한다.
잘 알려진 포트(well-known port)
사용가능한 포트번호 범위 : 0~65535번
규약에따라 역할이 정해진 포트범위 : 0~1023번
여기서 규약에의해 역할이 정해진 포트를 "잘 알려진 포트" 라고 부른다.
그 중 자주 사용되는 포트번호를 정리해보겠다.
- 22번(SSH,Secure Shell Protocol) : 원격 접속을 위한 포트번호
- EC2 인스턴스에 연결할때 22번 포트를 사용한다
- 80번(HTTP) : HTTP로 통신을 할때사용
- 443번(HTTPS): HTTPS로 통신을 할때 사용
여기서 주의할 점은 규약을 꼭 지켜야 하는것은 아니다.
HTTP통신할때 80번 포트 대신 3000번 포트나 8080번 포트를 써도 상관없다!
그래서 Docker가 뭔데 ?
다시 주제로 돌아와 간단히 얘기하자면,
Docker는 컨테이너를 사용하여 각각의 프로그램을 분리된 환경에서 실행 및 관리할 수 있는 툴이다.
컨테이너(Container)란 ?
윈도우 환경에서 하나의 컴퓨터에 여러 사용자로 나눠서 사용 할 수 있다.
각 사용자의 환경에 들어가보면 독립적으로 구성되어있어서 필요한 프로그램을 각 사용자 환경에 개별로 설치해줘야 한다.
컨테이너의 개념도 비슷하다.
하나의 컴퓨터환경 내에서 독립적인 컴퓨터 환경을 구성해서, 각 환경에 프로그램을 별도로 설치할 수 있게 만든 개념이다.
하나의 컴퓨터 환경 내에서 여러개의 미니컴퓨터 환경을 구성할 수 있는 형태다.
여기서 얘기하는 미니컴퓨터를보고 Docker 에서는 컨테이너(Container)라고 부른다.
여기서 '컨테이너'와 '컨테이너를 포함하고있는 컴퓨터'를 구분하기 위해
컨테이너를 포함하고있는 컴퓨터에 "호스트(host)컴퓨터"라고 부른다.
컨테이너(Container)의 독립성
컨테이너는 '독립적인 컴퓨터 환경' 이라고 얘기했다.
구체적으로 어떤 것들이 독립적으로 관리되는 것인지 짚어보자.
- 디스크(저장공간) : 각 컨테이너마다 서로 각자의 저장공간을 가지고있다. 일반적으로 A 컨테이너 내부에서 B 컨테이너 내부에 있는 파일에 접근할 수 없다.
- 네트워크(IP,Port) : 각 컨테이너마다 고유의 네트워크를 가지고 있다. 컨테이너는 각자의 IP주소를 가지고 있다.
여담으로 컨테이너 개념을 공부할때 "하나의 환경 내에서 여러가지의 독립적인 환경을 가질 수 있다는 개념" 에서
2024.10.28 - [언어/Python] - [Python] Anaconda/Miniconda 설치 및 가상화 설정
[Python] Anaconda/Miniconda 설치 및 가상화 설정
아나콘다가 뭔데 ?우리는 파이썬 언어를 이용해서 프로젝트를 진행할때 여러가지 라이브러리 및 패키지들을 사용하게 된다.그런데 각 라이브러리끼리의 권장 버전이 각각 달라서 종종 라이브
o-yoon.tistory.com
예전에 라이브러리 충돌을 피하면서 파이썬을 사용하기 위해 아나콘다의 미니콘다를 이용해 가상환경을 사용했던게 기억이 나서
비슷한 개념인가 ? 해서 부장님한테도 여쭤보고 지피티한테도 질문했는데
컨테이너와 가장 큰 차이는 "독립성"에 있는것 같다.
컨테이너는 각각의 고유한 네트워크를 가지는데, 가상환경은 말 그대로 하나의 네트워크의 가상(virtual)환경인거니까,,
나처럼 혼동하는 사람 없길 😂
이미지(Image)란?
이미지는 프로그램을 실행하는데 필요한 설치과정, 설정, 버전정보 등을 포함하고있다.
즉, 프로그램을 실행하는 데 필요한 모든것을 포함하고 있다.
ex) 닌텐도칩