컴퓨터공학/클라우드 서비스

[클라우드 서비스] Docker 개념과 AWS ec2 환경에 설치하기

Harvie 2024. 6. 5. 17:56
반응형

Docker란?

컨테이너를 손쉽게 이동해서 어디서나 간단하게 실행할 수 있는 도구와 환경을 제공하는 오픈 소스 플랫폼

고래등에 올려진 컨테이너 박스들처럼 프로그램과 실행에 필요한 것들을 컨테이너에 담는다.

- 도커는 Linux 커널을 사용하고 있는 환경에 있다면 어디서나 작동하기 때문에 플랫폼을 의식하지 않고 사용 가능 (Linux 만)

Docker 아키텍처

출처 : docker.com

VMs vs Contaniers(Docker)

Virtual Machines

가상화된 애플리케이션에는 애플리케이션 자체와 필요한 바이너리/
라이브러리 뿐만 아니라 운영체제 전체가 포함
Docker

도커 엔진 컨테이너는 애플리케이션과 꼭 필요한 바이너리/라이브러리만 갖추고 있다.
운영체제상의 사용자 공간에 격리된 프로세스로 구동되기 때문에 가상머신의 이점을 누리면서도 이동성이 훨씬 뛰어나다.

시작시간 비교

  • 하드웨어 가상화는 CPU, 메모리, 하드 디스크 등의 하드웨어를 가상화하고 있기 때문에 하드웨어나 OS부팅해야 하므로 부팅에 시간소요 걸림
  • 컨테이너 형 가상화에서는 컨테이너 부팅시 OS는 이미 시작하고 프로세스의 시작만 하므로 부팅 소요시간 절약
Virtual Machines Docker

오버헤드 비교

  • OS에서 응용 프로그램을 작동하는 경우, 하드웨어 가상화에서는 가상화된 하드웨어 및 하이퍼바이저를 통해 처리하기 때문에 물리적 시스템보다 처리에 부가적인 시간(오버헤드)가 필요
  • 컨테이너형 가상화 커널을 공유하고 개별 프로세스가 작업을 하는 것과 같은 정도의 시간밖에 걸 리지 않기 때문에 대부분 오버해드가 없음
Virtual Machines Docker

AWS EC2 Ubuntu에서 도커 사용하기

우선 이전 게시물들에서 이용했던 ec2 환경에 접속한다.

repository 인덱스 갱신하기

최신 패키지로 저장소에 있는 패키지들을 업데이트

sudo apt update

 

도커 다운을 위해 필요한 패키지 설치

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

 


패키지 설명

apt-transport-https 패키지

APT가 HTTPS 프로토콜을 통해 보안된 연결을 통해 패키지를 다운로드할 수 있도록 해준다.
이 도구가 설치되면 APT는 HTTPS를 통해 패키지 소스 및 패키지 파일을 안전하게 다운로드하고 설치 가능하다.

ca-certificates 패키지

HTTPS 연결을 통해 인증된 서버와 통신할 때 사용되는 인증서를 관리한다.
이 패키지를 설치하면 시스템은 안전한 HTTPS 연결을 설정하고 인증된 서버와 통신 가능하다.

curl(Client URL)

커맨드 라인 도구로, 다양한 프로토콜(HTTP, HTTPS, FTP 등)을 통해 데이터를 전송 가능하다.
웹 페이지나 파일을 다운로드할 때 주로 사용한다.
우분투 및 데비안 기반 시스템에서 소프트웨어 저장소와 PPA(Personal Package Archives)를 관리한다.
패키지 add-apt-repository 명령어를 사용할 수 있게 되어 추가적인 저장소를 시스템에 쉽게 추가 가능하다.

curl 명령어로 도커 다운받기

관리자 권한(sudo)으로 GPG 키 다운로드 및 저장한다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

repository에 경로 추가하여 apt 리스트에 패키지 다운 경로 추가(Docker 저장소 추가)

echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

패키지 목록 업데이트

sudo apt update

도커 설치하기

명령어를 실행하는 중간에 물어보는게 나오면 Y를 입력하면 된다.

sudo apt install docker-ce

도커 서비스 시작

sudo systemctl start docker

도커 시스템 상태 확인

sudo systemctl status docker

도커 설치 확인

docker --version

set linenum 300 명령어 실행

set linenum 300
#Vi/Vim 편집기에서 파일의 행 번호를 300부터 시작하여 표시하도록 설정하는 명령어

Hello world 이미지 받기 및 삭제

sudo docker pull hello-world
sudo docker images
sudo docker run hello-world
sudo docker ps -a 
sudo docker rm [컨테이너ID]
sudo docker images

우분투 이미지 다운

sudo docker pull ubuntu:20.04  # 우분투 이미지를 내려받음
sudo docker images #이미지 확인
docker run # Docker 컨테이너를 생성하고 실행하는 명령어
sudo docker run -dit -p 8080:80 --name mycontainer ubuntu:20.04  # 우분투 이미지를 기반으로 컨테이너 실행

컨테이너 진입

sudo docker exec -it mycontainer /bin/bash

nginx, nano 설치

apt-get update
apt-get install nginx # 국가 설정도 해야됨.
apt-get install nano

nginx를 설치했으니 실제 nginx 웹서버의 메인 설정파일을 들어가보자. 설정파일은 다음의 경로에 존재한다.
nano /etc/nginx/nginx.conf

nginx.conf를 내리다보면, 다음과 같이 /etc/nginx/sites-enabled/* 가 있다. sites-enabled폴더 하위의 모든 파일을 include하기 때문에 저 경로를 따라가서 확인한다.
cd /etc/nginx/sites-enabled/

이 경로에서 ls를 해보면 default파일이 있다. 이 default파일은 nginx 웹서버가 설치되면 기본적으로 제공되는 설정파일이다.
default파일을 살펴보자.
상단에는 위와 같이 listen 80 default_server가 보인다. listen은 http요청을 받을 포트를 설정하는 부분이다.
server_name은 도메인 이름을 설정하는 부분이다. 지금은 도메인 이름을 설정하지 않을 것이므로 default로 넘어간다.

하단의 location에는 웹서버 주소에 따라 어디서 파일을 줄 것인지에 대한 경로를 명시한다. nginx는 디폴트로 http 요청 url이 "/"로 온다면  root /var/www/html 경로에 있는 index파일을 응답한다

이제 root /var/www/html 경로에 있는 index파일을 확인하러 가보자
index.nginx-debian.html이란 파일이 있고(index.html로 수정하자), 
여기서 원하는 부분을 조금 수정해서 저장해보자

서버 재시작

service nginx restart

http://3.34.185.89:8080/에 접속해보자.
그럼 html이 띄워져 있을 것이다.

컨테이너 삭제 명령어

sudo docker stop 컨테이너이름 or 컨테이너id
sudo docker rm 컨테이너이름 or 컨테이너id
sudo docker ps -a 로 확인

이미지 삭제

이미지로 생성된 컨테이너 있으면 컨테이너 중지 및 삭제 후
sudo docker rmi REPOSITORY이름 or 이미지id
sudo docker images로 확인
반응형