Notice
Recent Posts
Recent Comments
Today
Total
04-30 08:58
Archives
관리 메뉴

Jeongchul Kim

Docker AWS EC2 설치 본문

Docker

Docker AWS EC2 설치

김 정출 2018. 11. 20. 22:03


Docker AWS EC2 설치


Docker

Docker는 응용프로그램(application)을 개발하고, 실행하고, 프로덕션(production) 환경에 배포(deploy)할 수 있는 개방형 플랫폼입니다. Docker는 Go 언어로 짜여져 있습니다.


Docker는 Container라는 독립된 환경(isolated environment)에서 응용 프로그램을 패키징하고 실행할 수 있는 기능을 제공합니다. 주어진 서버나 호스트 머신에서 여러 container를 동시에 실행할 수 있습니다. Container는 기존의 VM(Virtual Machine)의 추가적인 Hypervisor의 오버헤드가 사라지게 되며 경량(lightweight)화되어 빠르게 host 시스템의 kernel에서 프로세스로 직접 실행됩니다. AWS Lambda의 경우 VM인 EC2 Instance에서 Container를 활용해 사용자에게 제공합니다.


Docker는 container의 수명 주기(lifecycle)를 관리하는 플랫폼(platform)을 제공합니다. container는 application을 deploy하고 테스트하는 단위가 됩니다. 실제 배포하는 프로덕션 환경이 on-prem의 데이터 서버거나, 클라우드 환경에 상관없이 동일하게 실행됩니다.


Docker는 빠르고 가볍기 때문에 연구실에서 연구 실험 목적으로 실제로 같은 하드웨어서 동일한 workload를 돌리며 실험을 진행할 때 많이 사용했습니다. 또는 연구실의 서버 5대를 이용해 학생들에게 각각에게 hadoop이나 spark cluster를 제공하기 위해 docker를 이용해 여러 개의 master와 slave를 쉽게 구축했습니다. container는 독립된 환경(파일 시스템)을 제공하기 때문에  학생들 간에 상호 영향을 받지 않고 과제를 진행할 수 있습니다.

Docker Engine

Docker Engine은 클라이언트-서버(client-server) application으로 다음의 구성요소로 이루어집니다.

- server는 Docker 데몬(daemon) 프로세스로 길게 지속되는 프로그램 입니다. daemon은 Docker 객체(image, container, network, volume)을 생성하고 관리합니다. (dockerd 명령어)

- REST API는 프로그램이 Docker daemon과 통신가능하도록 인터페이스를 제공합니다.

- CLI(Command Line Interface)는 REST API를 사용해 Docker daemon을 제어하거나 상호작용합니다.


https://docs.docker.com/engine/docker-overview/#docker-engine


Docker Architecture

위에서 설명했다시피 Docker는 client-server 아키텍처를 사용합니다. Docker client는 Docker daemon과 상호 작용을 합니다.

Docker daemon은 container를 빌드(build)하고 실행하거나, deploy하는 작업을 수행합니다. client와 daemon은 UNIX 소켓(socket) 또는 네트워크 인터페이스를 이용한 REST API를 사용해 통신합니다.


https://docs.docker.com/engine/docker-overview/#docker-architecture


Docker Registry

Docker Registry는 Docker image를 저장합니다. Docker Hub나 AWS, Google Cloud와 같은 클라우드 사에서도 제공하고 있으며 누구나 사용할 수 있습니다. Docker는 기본적으로 Docker Hub에서 image를 찾도록 구성되어 있습니다.


docker pull이나 docker run 명령어를 사용하면 registry에서 필요한 image를 가져옵니다.

docker build -t로 생성된 image를 docker push를 통해 registry에 올릴 수 있습니다.


Docker Store(https://store.docker.com/)를 통해서 Docker image를 사고 팔거나 무료로 배포할 수 있습니다.


Images

image는 container를 생성하기 위한 읽기 전용(read-only) 파일입니다. image는 다른 image를 기반으로 생성할 수 있고 추가적으로 커스텀(customization)이 가능합니다. 예를 들어 ubuntu 공식 이미지를 이용해 Apache Web server나 Hadoop Cluster, Spark Cluster를 생성할 수 있습니다.


image는 간단한 문법으로 이루어진 Dockerfile을 통해 생성할 수 있습니다. Dockerfile은 docker build 명령어로 빌드 가능합니다.


Containers

container는 image를 통해 실행 동작 가능한 인스턴스(instance)입니다. Docker API나 CLI를 이용해 container를 생성하고 멈추고, 지울 수 있습니다. 또한 네트워크나 저장 장치를 연결할 수 있습니다.


Services

Docker services를 사용하면 여러 개의 Docker daemon에서 container를 확장할 수 있습니다. 즉 여러 대의 서버를 하나의 클러스터에 node로 추가하여 관리를 편하게 할 수 있다는 점입니다. 이를 통해 Hadoop Yarn 클러스터도 쉽게 만들 수 있습니다. service는 모든 node에 분산 부하(load-balanced)를 기본으로 합니다. Docker swarm 모드를 사용하면 좋습니다.


Namespaces

Docker는  namespaces를 이용해 container 간에 독립된 공간(isolated workspace)를 제공합니다.

- pid : Process isolation

- mnt : Managing filesystem mount points

- net : Managing network interfaces

- ipc : Managing access to IPC Resources

- uts : Isolating kernel and version identifiers.


Control groups

Docker 엔진은 cgroups(control groups)를 이용해 자원을 제한하거나 할당합니다. 메모리나 CPU의 특정한 양을 container에 할당할 수 있습니다.

AWS EC2 Docker 설치

자 이제 Docker에 대해 이해를 한 것 같습니다. AWS EC2에 Docker 설치를 진행해보겠습니다.

Google Cloud에서의 Docker는 http://jeongchul.tistory.com/568 있습니다.


AWS 자체의 Container 서비스가 여러 가지 있습니다만 AWS Container 서비스는 나중의 글에서 살펴보겠습니다.


여기서는 사용 환경을 AWS EC2 인스턴스를 시작하고, Docker를 직접 설치해보는 걸 진행해보겠습니다.

AWS EC2 콘솔로 이동합니다.

https://console.aws.amazon.com/ec2/



Launch Instance 버튼을 클릭합니다.

AMI를 선택해야 합니다. Amazon Linux AMi 2018.03.0은 Docker가 포함되어 있습니다.

우리는 직접 설치를 목표로 하기 때문에 Amazon Linux 2 AMI를 선택합니다.


인스턴스 타입은 t2.micro가 free tier를 사용하셔도 됩니다. Review and Launch 버튼을 클릭합니다.


저는 t2.small 타입을 선택해 free tier가 아니라는 알림이 나오네요. Launch 버튼을 클릭합니다.




존재하는 key pair가 있다면 선택을 하시고 없다면 새로운 key pair를 선택하여 다운로드 받습니다. 잃어버리면 안됩니다!

Launch Instances 버튼을 클릭합니다.


Launch Status가 보입니다. View Instances로 가서 확인해봅시다.


생성 중인 Instance가 보입니다. Name에 이름을 넣어봅시다. 저는 docker라고 짓겠습니다.


자 이제 터미널이나 putty를 이용해 접속을 해봅시다. 저는 mac을 쓰기 때문에 터미널로 ssh를 이용해 접속하겠습니다.

인스턴스에서 오른쪽 버튼을 클릭해 Connect 버튼을 클릭합니다.


다음의 팝업창이 나옵니다. 1번부터 쭉 따라하시면 됩니다. 새로 key-pair를 다운받으신 분들은 3번에 chmod를 이용해 권한 설정을 꼭해주세요.


터미널에서 ssh를 입력하여 접속해봅시다.

$ ssh -i "[KEY_PAIR_PATH]" ec2-user@[INSTANCE_ADDRESS]


Docker 설치

https://docs.docker.com/install/linux/docker-ee/rhel/

RedHat 기준으로 설치법을 따라해보겠습니다.



docker-ce를 설치하기 앞서 업데이트를 진행합니다.

$ sudo yum -y upgrade


설치를 진행해봅시다.

$ sudo yum -y install docker (동작 안됨 밑의 명령어를 사용해주세요)

$ sudo amazon-linux-extras install -y docker


docker 명령어를 실행해봅시다.

$ docker --version


$ docker


자 이제 Docker를 시작해봅시다.

$ sudo systemctl start docker


Docker는 non-root user에게 권한을 주고 싶다면 docker group에 추가하면 됩니다.

$ sudo usermod -aG docker ec2-user


적용을 위해 다시 접속해야 합니다.

exit로 ssh를 종료 하고 다시 접속합니다.


sudo 명령 없이 docker를 실행해봅시다.

$ docker ps


좋습니다!! 다음의 포스트에서 Docker CLI에 대해서 살펴봅시다.



Comments