도커, 도커허브설치 및 도커허브 회원가입
도커를 사용하려면
도커는 기본적으로 리눅스용이지만 윈도우와 macOS에서도 사용할 수 있다.
- 리눅스 컴퓨터에서 도커 사용하기
- 가상 머신이나 렌탈 환경에 도커를 설치하고 윈도우나 macOS를 통해 사용하기
- 윈도우용/macOS용 도커 사용하기
윈도우와 macOS에서는 리눅스 운영체제가 들어있는 패키지(도커 데스크톱)를 사용한다.
리눅스 컴퓨터에 도커를 설치하려면 도커 엔진만 있으면 되지만 윈도우나 macOS에서는 리눅스 운영체제 등의 실행환경이 추가로 필요하기 때문에 이들을 함께 패키지로 묶어 배포한다.
윈도우용/macOS용이긴 하지만 완전한 윈도우용/macOS용 소프트웨어는 아니며 윈도우나 macOS에 사용자에게는 보이지 않는 가상의 리눅스 환경을 만들고 이 환경에서 도커 엔진을 구동하는 구조이다.
가상 환경 vs. 도커 데스크톱
가상 환경을 사용하는 방식은 사용자가 명시적으로 가상화 소프트웨어를 설치하고, 그 위에 리눅스 운영체제를 설치한 다음 여기에 도커 엔진을 설치하는 방법으로 구축하는 데 비해 도커 데스크톱은 사용자가 가상화 환경이나 리눅스 운영체제를 신경 쓰지 않고도 도커를 사용할 수 있다.
또한 내부적으로 사용되는 가상화 소프트웨어에도 차이가 있다.
가상 환경의 경우 VirtualBox나 VMware 같은 소프트웨어를 사용하는 데 비해
윈도우용 도커 데스크톱은 Hyper-V,
macOS용 도커 데스크톱은 HyperKit이라는 가상화 기술을 사용한다.
도커 데스크톱은 일반적인 소프트웨어처럼 사용한다.
도커를 사용하면서 가상화 소프트웨어나 리눅스 운영체제의 존재를 신경 쓰지 않아도 된다는 특징이 있다.
다만 도커 데스크톱을 실행한 후 실제 도커 엔진을 다룰 때는 드래그 앤드 드롭 같은 마우스를 이용한 조작은 불가능하며, 명령행 인터페이스를 통해 조작해야 한다.
도커 다운로드
https://www.docker.com/products/docker-desktop/
도커 설치 후 터미널을 열어 다음 명령어를 실행한다.
docker run -d -p 80:80 docker/getting-started
그러면 다음과 같이 하나의 컨테이너가 동작한다.
그리고 브라우저 창에서 localhost로 이동하면 다음과 같은 창이 나타난다.
실행 명령어
방금 전 터미널 창에서 실행한 다음 명령어가 뜻하는 것은 다음과 같다.
docker run -d -p 80:80 docker/getting-started
- 위의 명령어(docekr run)는 Docker 컨테이너를 실행하는 데 사용되는 명령어이다.
- 각각의 인수가 뜻하는 바는 다음과 같다.
- -d
: 이 플래그는 컨테이너를 "백그라운드 모드"로 실행하도록 지시한다.- 컨테이너가 백그라운드에서 실행되면 컨테이너의 출력이 터미널에 표시되지 않는다.
- -p 80:80
: 이 플래그는 호스트의 포트 80과 컨테이너의 포트 80을 매핑한다.
- 이를 통해 호스트의 포트 80으로 들어오는 요청이 컨테이너의 포트 80으로 전달되어 웹 서비스 등을 호스트에서 사용할 수 있게 된다.
- docker/getting-started
: 이 부분은 실행할 Docker 이미지의 이름을 의미한다.- docker/getting-started는 Docker Hub에서 제공되는 공식 이미지 중 하나로, 실제로 도커 컨테이너를 실행할 때 사용되는 이미지이다.
- -d
- 즉, 위의 명령은 docker/getting-started 이미지를 사용해 포트 매핑을 설정하고, 컨테이너를 백그라운드에서 실행하는 것이다.
- 이렇게 하면 호스트의 포트 80을 통해 컨테이너 내부의 웹 서비스에 액세스할 수 있다.
동작
- 하드웨어 위에 운영체제 위에 여러 어플리케이션이 존재한다.
- 위에서 docker 명령어를 입력하면 운영체제 위에 새로운 컨테이너를 생성한다.
- 이때 컨테이너의 운영체제는 우분투이며, 컨테이너 내부에 NginX가 설치되어 있으며 포트는 80으로 돌아가고 있다.
- 외부에서는 IP 주소와 함께 포트 번호를 기입하면 해당 NginX에 접근 가능하다.
- 우분투와 NginX 설치가 위의 명령어 하나로 간단히 처리되었다.
- 이럴 수 있는 이유는 docker/getting-started 이미지 컨테이너를 받으며 실행했기 때문이다.
- docker/getting-started는 도커허브에 위치한다.
NginX
NginX(엔진엑스)는 높은 성능과 확장성을 갖춘 오픈 소스 웹 서버 소프트웨어이다.
주로 정적 콘텐츠의 제공 ,리버스 프록시, 로드 밸런싱, HTTP 캐싱 등의 기능을 수행하는 데 사용된다.
NginX의 주요 특징과 기능은 다음과 같ㄴ다.
1. 높은 성능
: NginX는 비동기 이벤트 기반 아키텍처를 통해 많은 동시 연결을 처리할 수 있다.
이를 통해 많은 수의 요청을 효율적으로 처리하고 빠른 응답 시간을 제공할 수 있다.
2. 리버스 프록시
: NginX는 클라이언트 요청을 백엔드 서버로 전달하는 리버스 프록시 역할을 수행할 수 있다.
이를 통해 로드 밸런싱, SSL 오프로딩, 캐싱, 보안 등의 기능을 제공하며, 여러 서버를 단일 진입점으로 관리할 수 있다.
3. 로드 밸런싱
: NginX는 여러 대의 백엔드 서버에 동일한 요청을 분산해 부하를 분산시키는 로드 밸런싱을 수행할 수 있다.
이를 통해 서버의 가용성과 확장성을 향상시키고 안정적인 서비스를 제공할 수 있다.
4. 정적 파일 서비스
: NginX는 정적인 콘텐츠(HTML, CSS, JavaScript, 이미지 등)를 효율적으로 제공할 수 있는 기능을 제공한다.
정적 파일 서비스에 특화된 긴으들로 인해 웹 서버에서 뛰어난 성능을 발휘한다.
5. HTTP 캐싱
: NginX는 캐싱 기능을 통해 다양한 요청에 대한 응답을 캐시하여 서버 부하를 줄이고 응답 시간을 개선할 수 있다.
캐싱은 정적 파일 뿐만 아니라 동적 콘텐츠에 대해서도 적용될 수 있다.
6. SSL/TLS 지원
: NginX는 SSL/TLS 암호화를 지원해 웹 애플리케이션의 보안을 강화할 수 있다.
HTTPS 프로토콜을 통해 안전한 통신을 제공하며, SSL 인증서의 설정과 관리를 용이하게 한다.
7. 확장성
: NginX는 수많은 동시 연결을 처리할 수 있는 확장성을 가지고 있으며, 추가적인 서버 노드를 추가함으로써 성능을 더욱 향상시킬 수 있다.
[참고] NginX vs. Apache
NginX와 Apache 모두 인기 있는 웹 서버 소프트웨어이다.
차이점
1. 아키텍처
- Apache: Apache는 프로세스 기반 아키텍처로 동작한다.
- 각 클라이언트 요청마다 새로운 프로세스 또는 스레드를 생성하여 처리한다.
- 이는 메모리 사용량이 높아지고 성능에 영향을 줄 수 있다.
- Nginx: Nginx는 이벤트 기반 아키텍처로 동작한다.
- 단일 프로세스 또는 스레드에서 여러 연결을 비동기적으로 처리한다.
- 이는 적은 리소스 사용과 높은 동시 연결 처리 능력을 제공한다.
2. 성능
- Apache: Apache는 다양한 모듈과 확장성을 제공하면서도 안정성과 호환성에 중점을 둔 전통적인 웹 서버이다.
- 정적 파일 서비스와 동적 콘텐츠 처리에 강점이 있으나 많은 프로세스 또는 스레드를 생성하는 방식으로 인해 고부하
상황에서는 성능에 제약이 있을 수 있다.
- Nginx: Nginx는 경량이면서도 높은 성능을 제공한다.
- 비동기 이벤트 기반 아키텍처를 통해 동시 연결 처리, 리버스 프록시, 로드 밸런싱 등에 탁월한 성능을 보여준다.
- 특히 정적 파일 서비스와 로드 밸런싱에 특화되어 있으며, 많은 동시 연결을 처리하는 데 우수한 성능을 발휘한다.
3. 설정
- Apache: Apache는 기본적으로 .htaccess 파일을 사용하여 디렉토리마다 설정을 관리한다.
- 이는 유연성과 동적 설정 변경이 가능하다는 장점이 있다.
- Nginx: Nginx는 주 설정 파일에 모든 설정을 기록하는 방식이다.
- .htaccess 파일을 지원하지 않으며, 변경된 설정을 적용하려면 서버를 재시작해야 한다.
- 정적인 설정 환경에서 운영되는 경우 설정 파일 기반의 접근이 단순하고 빠르다는 장점이 있다.
4. 확장성
- Apache: Apache는 다양한 모듈과 확장성을 제공하여 유연한 웹 서버 환경을 구축할 수 있다.
- 다양한 모듈을 통해 기능을 추가하고 사용자 정의할 수 있다.
- Nginx: Nginx도 다양한 모듈을 제공하지만, 주로 고성능 정적 파일 서비스, 리버스 프록시, 로드 밸런싱 등의 기능에 중점을 두고 있다.
- 비동기 이벤트 기반 아키텍처로 인해 높은 동시 연결 처리 능력과 확장성을 제공한다.
두 웹 서버는 각각의 장점과 사용 사례가 있으며, 선택은 사용자의 요구 사항과 환경에 따라 달라진다.
일반적으로 정적 파일 서비스와 고성능 요구 사항이 있는 경우 Nginx를 선호하며, 동적 콘텐츠와 호환성을 중시하는 경우 Apache를 선택하는 경향이 있다.
도커 컴포즈 다운로드
MacOS를 사용하는 경우 docker 웹사이트에서 docker 설치시 도커 컴포즈까지 함께 설치된다.
https://www.docker.com/products/docker-desktop/
도커허브 회원가입
Docker Desktop을 실행하고 우측 상단을 확인하면 Sign in 버튼이 존재한다.
해당 버튼을 클릭하면 다음과 같이 로그인 화면으로 이동한다.
하지만 현재 보유하고 있는 계정이 없으므로 접속하지 못한다.
다음 사이트에서 도커 허브 계정을 생성하도록 한다.
[참고]
도커 허브 사이트에서 다음과 같은 작업을 수행할 수 있다.
예를 들어 현재 내가 tomcat을 가지는 리눅스 서버가 필요할 때 검색창에 tomcat을 검색해 내가 원하는 조건을 찾을 수 있다.
여기서 tomcat 앞에 문자는 사용자 아이디에 해당한다.
사용하는 방법은 간단하다.
사진 우측의 docker pull java를 복사해 터미널창에 그대로 작성해주면 된다. (여기서는 java 대신 openjdk로 직접 입력해본다.)
하지만 아직 docker desktop의 container에는 존재하지 않는다.
docker images 명령어를 사용해 다운로드 받은 image들을 확인한다.
openjdk 이미지가 제대로 설치된 것을 확인할 수 있다.
여기서 openjdk 이미지를 실행시키면 자바가 설치된 OS 환경을 바로 사용할 수 있다.
도커 엔진 시작/종료
도커 엔진은 컴퓨터를 켰을 때 함께 자동으로 실행할 수 있지만, 컨테이너는 그렇지 않다.
도커 엔진은 설치와 함께 실행되며, 계속 동작 상태로 남아 있지만 컨테이너를 실행 중이 아니라면 컴퓨터의 리소스를 거의 차지하지 않으므로 문제가 없다.
도커 데스크톱은 도커 엔진을 자동으로 실행하도록 설정되어 있기 때문에 이 설정도 비활성화하지 않으면 컴퓨터가 부팅될 대마다 도커 엔진도 자동으로 실행된다.
도커 엔진 위에서 동작하는 컨테이너는 또 다르다.
도커 데스크톱이나 리눅스 버전 모두 도커 엔진이 한번 종료되면 모든 컨테이너는 정지 상태가 된다.
'Docker' 카테고리의 다른 글
도커 이미지 삭제하기 (0) | 2023.05.24 |
---|---|
도커 컨테이너의 생애주기와 데이터 저장 (0) | 2023.05.24 |
도커 작동 원리 (0) | 2023.05.24 |
도커, 도커컴포즈, 도커허브 (0) | 2023.05.18 |
도커(Docker) 개념 (0) | 2023.05.18 |