본문 바로가기

클라우드

Docker기본 개념과 AWS EC2 Ubuntu에서 docker 실행해보기

# 작성할 내용

1. Docker 기본 개념

2. AWS EC2 Ubuntu에서 docker 실행하기

 

1. Docker 기본개념

 

1) Docker 란

docker의 뜻은 부두 노동자입니다 

부두를 떠올려보면 오른쪽과 같은 아주 많은 컨테이너가 있는 장소가 연상됩니다

아마 노동자들은 컨테이너들을 옮기고 관리하는 일을 하겠죠?

 

 

이처럼 도커는 컨네이너들을 관리하면서 프로그램을 언제 어디서나 간단하게 실행할 수 있는 도구와 환경을 제공하는 오픈 소스 플랫폼입니다. 프로그램과 실행에 필요한 것들을 컨테이너에 담아 운송합니다.

 

도커는 Linux(리눅스) 커널을 사용하고 있는 환경이라면 어디서나 작동하기 때문에 플랫폼에 의식하지 않고 사용할 수 있습니다

 

 2) 도커의 아키텍처

클라이언트에서 명령을 하면 도커데몬을 거쳐 이미지를 생성하거나 생성한 이미지를 이미지 저장소인 레지스트리에 올릴 수 있습니다. 여기서 이미지는 컨테이너를 생성하기 위한 내용들을 담은 읽기 전용 템플릿입니다.

 

3) 도커 컨테이너 장점

 

A. 가볍고 이동성이 좋다

좌: 가상머신 우: 도커

가상화된 애플리케이션에는 애플리케이션 자체와 이것에 필요한 바이너리/라이브러리뿐만 아니라 운영체제 전체가 포함되는 반면, 도커 엔진 컨테이너는 애플리케이션과 실행에 필요한 최소한의 바이너리/라이브러리만 갖추고 있습니다.

그렇기 때문에 비교적 훨씬 가볍고 독립적인 프로세스로 구동되기에 가상머신의 이점을 누리면서도 이동성이 훨씬 뛰어납니다.

 

B. 부팅속도가 빠르다

 

하드웨어 가상화는 cpu,메모리, 하드 디스크 등의 하드웨어를 가상화하고 있기 때문에 하드웨어나 운영체제를 부팅해야 하므로 부팅에 시간이 소요되는 반면

컨테이너형 가상화는 컨테이너 부팅 시 운영체제는 이미 시작하고 프로세스의 시작만 필요하므로 부팅이 비교적 빠릅니다

 

C. 오버헤드가 거의 없다

하드웨어 가상화는 가상화된 하드웨어 및 하이퍼바이저를 통해 처리하기 때문에 물리적 시스템보다 오버헤드가 발생할 수 밖에 없는데, 컨테이너형 가상화는 커널을 공유하고 개별 프로세스가 하는 것과 같은 정도의 시간밖에 걸리지 않기 때문에 대부분 오버헤드가 없습니다

 

참조 문헌:

https://aws.amazon.com/ko/docker/

 

Docker란 무엇입니까? | AWS

Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc

aws.amazon.com

https://aws.amazon.com/ko/compare/the-difference-between-docker-images-and-containers/

 

도커 이미지와 컨테이너 비교 - 애플리케이션 배포 기술 간의 차이점 - AWS

컨테이너를 사용하면 개발자가 소프트웨어를 패키징하여 모든 대상 시스템에서 실행할 수 있습니다. 이전에는 서로 다른 대상 시스템에 맞게 소프트웨어를 패키징해야 했습니다. 예를 들어 macO

aws.amazon.com

 

2. AWS EC2 Ubuntu에서 docker 실행하기

작업할 내용의 전체 아키텍처입니다

EC2에 docker를 설치하여 ubuntu 컨테이너를 얹어볼 것입니다

putty에서 작업할 것이고 로그인까지 완료된 상태라고 생각하고 시작하겠습니다

 

Docker 설치하기

 

1) sudo apt update

레포지토리 인덱스를 갱신합니다. 이것은 저장소에 있는 패키지들을 최신 상태로 업데이트하는 과정입니다

 

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

docker를 다운로드에 필요한 패키지들을 설치합니다

패키지 1 : apt-transport-https 

apt가 https 프로토콜을 통해 패키지 소스 및 패키지 파일을 안전하게 다운로드하고 설치하도록 합니다

패키지 2 : ca-certificates

시스템이 안전한 https 연결을 설정하고 인증된 서버와 통신 가능하도록 합니다

패키지 3 : curl 

'client url' 의 약자이며 커맨드라인 도구로, 다양한 프로토콜을 통해 데이터를 전송 가능합니다

패키지 4 : software-properties-common

우분투 및 데비안 기반 시스템에서 소프트웨어 저장소와 ppa를 관리하는 패키지입니다. add-apt-repository 명령어를 사용하여 추가적인 저장소를 시스템에 쉽게 추가할 수 있습니다

 

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

curl 명령어로 docker를 다운로드합니다. 관리자 권한으로 GPG 키를 다운로드 및 저장합니다

 

4) 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

레포지토리에 경로를 추가하여 apt 리스트에 패키지 다운로드 경로를 추가합니다

 

5) sudo apt update
다운로드한 패키지들의 목록을 업데이트 합니다

 

6) sudo apt install docker-ce
    sudo docker

docker를 설치합니다

 

7) sudo systemctl start docker

docker 서비스를 시작합니다

 

8) sudo systemctl status docker
    docker --version

docker 시스템 및 설치를 확인합니다

 

ubuntu 이미지 다운로드 및 컨테이너 생성

아키텍처를 보면 docker의 os는 우분투입니다 이제 우분투 이미지를 다운로드하겠습니다

 

1 ) sudo docker pull ubuntu:20.04  

     sudo docker images 

이미지를 내려받고 확인합니다

 

2) sudo docker run -dit -p 8080:80 --name 사용할컨테이너명 ubuntu:20.04

우분투 이미지를 기반으로 docker 컨테이너를 생성하고 실행합니다

여기서 8080은 호스트포트이고 80은 컨테이너포트입니다

 

3) sudo docker exec -it 위에서만든컨테이너명 /bin/bash

생성한 컨테이너에 진입합니다

 

4) apt-get update
    apt-get install nginx 
    apt-get install nano

우분투를 업데이트한 후 컨테이너 위에 nginx(웹서버) 와 nano 에디터(파일 관리)를 설치합니다

 

5) aws ec2 관리 콘솔에서 아까 설정한 포트를 열어줍니다

유형: 사용자 지정 TCP 규칙
프로토콜: TCP
포트 범위: 8080
소스: "위치: 0.0.0.0/0" 또는 필요한 IP 범위(모든 곳에서 액세스를 허용하려면 0.0.0.0/0)

index.html 띄우기

 

1) cd root /var/www/html

nginx는 디폴트로 http 요청 url이 "/"로 온다면 root /var/www/html 경로에 있는 index파일을 응답합니다

 

2) index.nginx-debian.html 수정

ls 명령어로 파일을 확인해보면 index.nginx-debian.html 라는 파일이 존재합니다

편의를 위해 이것을 mv 명령어를 통해 index.html으로 수정합니다

수정한 index.html파일을 내가 확인하기 쉽도록 nano index.html 명령어를 통해 조금 수정해보았습니다

 

3) service nginx restart

서버를 재시작합니다

 

4) index.html 웹브라우저 창에 띄우기

주소창에 본인의 ec2 퍼블릭 ip:8080/index.html 치고 들어가면

아까 수정한 파일의 내용이 잘 반영된 것을 볼 수 있습니다