도커의 기초 - 김상필 솔루션즈 아키텍트 :: aws container day

59
AWS Container Day AWS Container Day [2:00 ~ 3:00] 도커의 기초, AWS 김상필 SA [3:00 ~ 3:30] Case study - 삼성전자, 송주영 선임 [3:30 ~ 3:50] 휴식시간 [3:50 ~ 4:20] Case study - Goorm IDE, 남유석 개발팀장 [4:20 ~ 4:50] Case study - VINGLE, 조휘철 Software Engineer [4:50 ~ 5:00] 휴식시간 [5:00 ~ 6:00] EC2 Container Service DeepDive AWS 김기완 SA

Upload: amazon-web-services-korea

Post on 16-Apr-2017

2.271 views

Category:

Technology


7 download

TRANSCRIPT

Page 1: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

AWS Container Day [2:00 ~ 3:00] 도커의 기초, AWS 김상필 SA [3:00 ~ 3:30] Case study - 삼성전자, 송주영 선임 [3:30 ~ 3:50] 휴식시간 [3:50 ~ 4:20] Case study - Goorm IDE, 남유석 개발팀장 [4:20 ~ 4:50] Case study - VINGLE, 조휘철 Software Engineer [4:50 ~ 5:00] 휴식시간 [5:00 ~ 6:00] EC2 Container Service DeepDive AWS 김기완 SA

Page 2: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커의 기초 김상필 솔루션즈 아키텍트 아마존웹서비스 2015년 12월 14일

Page 3: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너란? What is container?

Page 4: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너란?

•  운영체제 가상화

•  프로세스 격리

•  자동화 •  이미지 기반

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

Page 5: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Page 6: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

손쉬운 사용, 표준화, 상호운용성을 갖춘 컨테이너

•  컨테이너는 이전부터 존재 (예 : LXC, Solaris Zones, BSD Jails)

•  도커 컨테이너의 장점 :

-­‐  손쉬운 사용을 위한 툴 -­‐  재사용 가능 컴포넌트 -­‐  현존하는 대부분 Linux 서버에서 구동 : 물리, 가상, 클라우드, …

Page 7: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 기술의 장점

Portable

•  이식성 장점 •  이미지 기반 배포, 버전 관리 •  어느 곳이나 동일한 운영 환경 •  개발/테스트/운영 환경 동일

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

Page 8: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 기술의 장점

Flexible •  유연성 •  이미지 기반으로 배포되는 컨테

이너는 클린하고, 재사용 가능한 모듈화 환경

•  마이크로서비스를 통해 어플리케이션을 작은 단위로 분할하고, 복잡성 줄이고, 신속하게 개발하는 것을 가능하게 함

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

Page 9: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 기술의 장점

Fast

•  가벼운 도커 이미지 •  신속한 개발, 빌드, 배포 과정

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

Page 10: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 기술의 장점

Efficient

•  필요한 리소스만을 배포 •  OS kernel & libs 를 공유하여 사

용하기 때문에 어플리케이션이 배포하는 것만을 배포

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

Page 11: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

+  

많은 고객이 Docker를 AWS에서 구동하는 이유

•  손쉬운 배포

•  환경의 신뢰성

•  대규모 환경 관리의 용이성

•  자동화

•  분산 애플리케이션

Page 12: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

AWS 환경에서 Docker 컨테이너 사용하기

•  Docker on EC2 –  Do it yourself –  다양한 도커 관련 오픈소스 및 3rd party 어플리케이션 활용

•  AWS Elastic Beanstalk 사용하기 –  가장 쉽게 도커 구동하기

•  Amazon EC2 Container Service 사용하기 –  대규모 확장성, 클러스터, 스케줄링, 서비스 구동 등

Page 13: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

DOCKER ON EC2 기초 AWS 환경에서 Docker 컨테이너 사용하기

Page 14: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 주요 구성 요소

•  도커 엔진 (또는 도커) – 컨테이너를 생성 또는 실행

•  도커 컨테이너 – 도커 인스턴스

•  도커 이미지 – 컨테이너 실행, 배포를 위한 스냅샷

•  도커 파일 – 이미지 생성 시 포함할 파일, 할당할 포트, 실행할 명령

어 등을 지정

•  도커 레지스트리 – 도커 이미지의 저장소 및 배포 시스템

•  도커 허브 – 레지스트리 서비스, 도커 데몬의 기본 저장소

Page 15: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Amazon Linux 인스턴스에서 도커 실행하기

1.  Amazon Linux 설치

Page 16: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Amazon Linux 인스턴스에서 도커 실행하기

2.  패키지 업데이트 [ec2-user ~]$ sudo yum update –y

3.  도커(Docker) 설치 (ECS는 Docker 버전 1.5 이상 필요, 1.7.1 권고) [ec2-user ~]$ sudo yum install -y docker

4.  도커 서비스 시작 [ec2-user ~]$ sudo service docker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]

Page 17: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Amazon Linux 인스턴스에서 도커 실행하기

5.  ec2-user의 Docker 그룹 추가 [ec2-user ~]$ sudo usermod -a -G docker ec2-user

6.  Docker 그룹 추가 확인 (재 로그인 후) [ec2-user ~]$ docker info Containers: 2 Images: 24 Storage Driver: devicemapper Pool Name: docker-202:1-263460-pool Pool Blocksize: 65.54 kB Data file: /var/lib/docker/devicemapper/devicemapper/data …

Page 18: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

AWS에서 CoreOS 와 도커 실행하기

1.  CoreOS AMI 사용

Page 19: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

AWS에서 CoreOS 와 도커 실행하기

2.  Running CoreOS on EC2 https://coreos.com/os/docs/latest/booting-on-ec2.html

3.  Running CoreOS with AWS EC2 Container Service https://coreos.com/os/docs/latest/booting-on-ecs.html

Page 20: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 허브 계정 생성 (Optional)

Page 21: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

1.  git 설치 및 예제 어플리케이션 다운로드 [ec2-user ~]$ sudo yum install -y git [ec2-user ~]$ git clone https://github.com/awslabs/ecs-demo-php-simple-app

2.  폴더 변경 [ec2-user ~]$ cd ecs-demo-php-simple-app

Page 22: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

3.  Dockerfile 내용 검토 [ec2-user ecs-demo-php-simple-app]$ cat Dockerfile FROM ubuntu:12.04 // 기본 이미지 지정

# Install dependencies RUN apt-get update –y // 패키지 업데이트 및 설치RUN apt-get install -y git curl apache2 php5 libapache2-mod-php5 php5-mcrypt php5-mysql # Install app RUN rm -rf /var/www/* // 소스를 Root 문서에 추가ADD src /var/www

Page 23: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

3.  Dockerfile 내용 검토 (계속) # Configure apache RUN a2enmod rewrite RUN chown -R www-data:www-data /var/www ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 EXPOSE 80 // 80포트 컨테이너에 EXPOSE CMD ["/usr/sbin/apache2", "-D", "FOREGROUND”] // 실행

•  Dockerfile  레퍼런스 -­‐  h?ps://docs.docker.com/engine/reference/builder/  

Page 24: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

4.  도커 이미지 빌드 [ec2-user ecs-demo-php-simple-app]$ docker build -t my-dockerhub-username/amazon-ecs-sample .

5. 도커 이미지 생성 확인[ec2-user ecs-demo-php-simple-app]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE sangpill/amazon-ecs-sample latest 76e66f4acec7 38 minutes ago 261.6 MB ubuntu 12.04 bad926a6fb50 4 days ago 136.9 MB

Page 25: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

6.  도커 신규 이미지 실행 [ec2-user ecs-demo-php-simple-app]$ docker run -p 80:80 my-dockerhub-username/amazon-ecs-sample ‘-p 80:80’ 옵션은 컨테이너의 EXPOSE 된 80 포트를 호스트의 80 포트에 매핑

•  Docker  run  레퍼런스 -­‐  h?ps://docs.docker.com/engine/reference/run/  

Page 26: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

7.  도커 내 웹서비스 동작 확인

Page 27: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

8.  도커 이미지를 도커 허브에 푸시 (Optional) [ec2-user ecs-demo-php-simple-app]$ docker login Username: sangpill Password: Email: [email protected] Login Succeeded [ec2-user ecs-demo-php-simple-app]$ docker info … Username: sangpill Registry: https://index.docker.io/v1/

Page 28: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

8.  도커 이미지를 도커 허브에 푸시 (Optional) (계속) [ec2-user ecs-demo-php-simple-app]$ docker push my-dockerhub-username/amazon-ecs-sample The push refers to a repository [sangpill/amazon-ecs-sample] (len: 1) b35d0a597de9: Image successfully pushed … Digest: sha256:877ee473bda901257f1a740e78eb3fa44356ca4ce6913efcd5361a6c5c103776

Page 29: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 생성

8.  도커 이미지를 도커 허브에 푸시 (Optional) (계속)

Page 30: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 수정

1.  컨테이너 실행 [ec2-user ecs-demo-php-simple-app]$ docker run -t -i sangpill/amazon-ecs-sample /bin/bash root@fde006b823db:/#

2.  컨테이너 내에서 어플리케이션 수정 root@fde006b823db:/# apt-get install -y vim root@fde006b823db:/# vi /var/www/index.php … 수정 전 : <h1>Simple PHP App</h1> 수정 후 : <h1>Container Day PHP App</h1> …

Page 31: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 수정

3.  도커 이미지 커밋 [ec2-user ecs-demo-php-simple-app]$ docker commit -m "Title change" -a "Sangpill Kim" fde006b823db sangpill/amazon-ecs-sample:v2 e011a7a969a914cf2ede7ac6a3ca82ac59306bdd1fabe45df29e67999b1b8aa6 [ec2-user ecs-demo-php-simple-app]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE sangpill/amazon-ecs-sample v2 e011a7a969a9 2 minutes ago 305.1 MB sangpill/amazon-ecs-sample latest 26fd428a79fa 3 hours ago 261.6 MB

Page 32: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 수정

4.  도커 이미지를 도커 허브에 푸시 (Optional) [ec2-user ecs-demo-php-simple-app]$ docker push sangpill/amazon-ecs-sample:v2 … Digest: sha256:6211c350f36a7b7ca615798be39f85a7aa937e108e7ecd49f71130f9f8f3d806

docker  commit은 간편하지만, 번거롭고 협업 시 배포 프로세스와 통합이 쉽지 않으므로 docker  build   사용  

Page 33: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 수정

4.  도커 이미지를 도커 허브에 푸시 (Optional)

Page 34: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub – SaaS로 제공

•  Docker Registry – 오픈소스 프로젝트를 직접 구축

•  Docker Trusted Registry – 엔터프라이즈 버전 구성

•  Amazon EC2 Container Registry(ECR) – 완전 관리형 서비스

Page 35: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

지원 명령어 •  # docker search •  # docker login •  # docker push •  # docker pull

지원 기능 •  Private repositories •  Organizations and teams •  Automated Builds •  Webhooks

Page 36: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

Deploying a registry server -  https://docs.docker.com/

registry/deploying/ -  도커 registry:2 로 배포 -  레지스트리 구성

config.yml storage: s3:

Page 37: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

Docker Trusted Registry for AWS

Page 38: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

•  완전 관리형 서비스 •  Amazon ECS 통합 •  Docker 호환 •  고가용성 및 내구성 •  팀 협업 •  간단한 워크플로우 •  접근 제어

•  암호화

•  모니터링

•  3rd 파티 통합

Page 39: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 배포 AWS 환경에서 Docker 컨테이너 사용하기

Page 40: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 배포

1.  호스트 접속 7831c1c87a16:~ sangpill$ ssh -i "snoopy-virginia-key.pem" [email protected]

2.  도커 이미지 검색 (Docker Hub) [ec2-user ~]$ docker search sangpill/amazon-ecs-sample NAME DESCRIPTION STARS OFFICIAL AUTOMATED sangpill/amazon-ecs-sample 0

Page 41: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 배포

3.  도커 이미지 풀 [ec2-user ~]$ docker pull sangpill/amazon-ecs-sample:v2 v2: Pulling from sangpill/amazon-ecs-sample … Status: Downloaded newer image for sangpill/amazon-ecs-sample:v2

4.  도커 이미지 확인 [ec2-user ~]$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE sangpill/amazon-ecs-sample v2 e011a7a969a9 52 minutes ago 305.1 MB

Page 42: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 배포

5.  도커 이미지로부터 실행 [ec2-user ~]$ docker run -p 80:80 sangpill/amazon-ecs-sample:v2 [ec2-user ~]$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7095f057b461 sangpill/amazon-ecs-sample:v2 "/bin/bash" About a minute ago Up About a minute 0.0.0.0:80->80/tcp drunk_brown

Page 43: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 이미지 배포

Page 44: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트 – 커맨드 및 스크립트 직접 수행

•  지속적 배포(CD) 툴 – 스크립트를 기존 CD 툴과 통합하여 사용

•  AWS Elastic BeansTalk – AWS에 Docker를 가장 쉽게 배포

•  오케스트레이션 툴 – 클러스터 및 스케줄링

•  Amazon EC2 Container Service(ECS) – 완전 관리형 서비스

Page 45: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

수행 명령어•  # docker pull •  # docker runDocker run 레퍼런스 •  Container identification •  IPC settings •  Network settings •  Restart policies •  Clean up •  Runtime resource constraints •  Runtime privilege

Page 46: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

배포의 유연성

반복 수행

가시성

배포 환경의 일관성

Page 47: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

도커를 실행하는 손쉬운 방법 Docker (Single) Multi-container Docker •  멀티 프로세스 어플리케이션 •  ECS를 래핑 •  관리를 단순화함

Page 48: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

클러스터 및 스케줄러 직접 구성 관리 3rd party 툴 •  Kubernetes •  Mesos, Marathon, Chronos

(https://github.com/awslabs/ecs-mesos-scheduler-driver)

•  Swarm

Page 49: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

Docker 호환성 모든 규모의 클러스터 쉽게 관리 유연한 컨테이너 배치 다른 AWS 서비스와 연동 확장 가능 규모에 따른 성능 보안

Page 50: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 파이프라인 AWS 환경에서 Docker 컨테이너 사용하기

Page 51: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 배포 형태

기본 이미지  

패치  

IT  운영  

유틸리티  

Page 52: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 배포 형태

기본 이미지  

Ruby  

Redis  

Logger  

IT  운영  

유틸리티  

패치  

Page 53: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 배포 형태

기본 이미지  

개발자  

Ruby  

Redis  

Logger  

App  

IT  운영  

유틸리티  

패치  

Page 54: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 배포 형태

기본 이미지  

Ruby  

Redis  

Logger  

App  

개발자  IT  운영  

유틸리티  

패치  

Page 55: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

연속 배포 (Continuous Deployment)

Bucket Amazon ECS

AWS CloudFormation

ECS Cluster

Page 56: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 사용사례 AWS 환경에서 Docker 컨테이너 사용하기

Page 57: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

컨테이너 사용 사례

•  손쉬운 애플리케이션 배포

•  애플리케이션 라이프 사이클

•  지속적 통합 (Continuous Integration)

•  지속적 배포 (Continuous Delivery)

•  플랫폼 서비스 (PaaS)

•  분산 애플리케이션 구성

•  분산 애플리케이션 확장

Page 58: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Q & A

Page 59: 도커의 기초 - 김상필 솔루션즈 아키텍트 :: AWS Container Day

AWS Container Day

Thank you