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

Post on 16-Apr-2017

2.271 Views

Category:

Technology

7 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

AWS Container Day

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

AWS Container Day

컨테이너란? What is container?

AWS Container Day

컨테이너란?

•  운영체제 가상화

•  프로세스 격리

•  자동화 •  이미지 기반

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

AWS Container Day

AWS Container Day

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

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

•  도커 컨테이너의 장점 :

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

AWS Container Day

컨테이너 기술의 장점

Portable

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

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

AWS Container Day

컨테이너 기술의 장점

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

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

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

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

AWS Container Day

컨테이너 기술의 장점

Fast

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

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

AWS Container Day

컨테이너 기술의 장점

Efficient

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

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

Server  

Guest  OS  

Bins/Libs   Bins/Libs  

App2  App1  

AWS Container Day

+  

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

•  손쉬운 배포

•  환경의 신뢰성

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

•  자동화

•  분산 애플리케이션

AWS Container Day

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

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

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

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

AWS Container Day

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

AWS Container Day

도커 주요 구성 요소

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

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

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

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

어 등을 지정

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

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

AWS Container Day

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

1.  Amazon Linux 설치

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 ]

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 …

AWS Container Day

AWS에서 CoreOS 와 도커 실행하기

1.  CoreOS AMI 사용

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

AWS Container Day

도커 허브 계정 생성 (Optional)

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

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

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/  

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

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/  

AWS Container Day

도커 이미지 생성

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

AWS Container Day

도커 이미지 생성

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

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

AWS Container Day

도커 이미지 생성

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

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> …

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

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   사용  

AWS Container Day

도커 이미지 수정

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

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub – SaaS로 제공

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

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

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

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

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:

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

Docker Trusted Registry for AWS

AWS Container Day

도커 레지스트리 구성 옵션

•  Docker Hub

•  Docker Registry

•  Docker Trusted Registry

•  Amazon EC2 Container Registry(ECR)

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

•  암호화

•  모니터링

•  3rd 파티 통합

AWS Container Day

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

AWS Container Day

도커 이미지 배포

1.  호스트 접속 7831c1c87a16:~ sangpill$ ssh -i "snoopy-virginia-key.pem" ec2-user@54.88.238.68

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

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

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

AWS Container Day

도커 이미지 배포

AWS Container Day

도커 실행 옵션

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

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

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

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

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

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

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

배포의 유연성

반복 수행

가시성

배포 환경의 일관성

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

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

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

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

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

•  Swarm

AWS Container Day

도커 실행 옵션

•  수동 / 스크립트

•  지속적 배포(CD) 툴

•  AWS Elastic BeansTalk

•  오케스트레이션 툴

•  Amazon ECS

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

AWS Container Day

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

AWS Container Day

컨테이너 배포 형태

기본 이미지  

패치  

IT  운영  

유틸리티  

AWS Container Day

컨테이너 배포 형태

기본 이미지  

Ruby  

Redis  

Logger  

IT  운영  

유틸리티  

패치  

AWS Container Day

컨테이너 배포 형태

기본 이미지  

개발자  

Ruby  

Redis  

Logger  

App  

IT  운영  

유틸리티  

패치  

AWS Container Day

컨테이너 배포 형태

기본 이미지  

Ruby  

Redis  

Logger  

App  

개발자  IT  운영  

유틸리티  

패치  

AWS Container Day

연속 배포 (Continuous Deployment)

Bucket Amazon ECS

AWS CloudFormation

ECS Cluster

AWS Container Day

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

AWS Container Day

컨테이너 사용 사례

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

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

•  지속적 통합 (Continuous Integration)

•  지속적 배포 (Continuous Delivery)

•  플랫폼 서비스 (PaaS)

•  분산 애플리케이션 구성

•  분산 애플리케이션 확장

AWS Container Day

Q & A

AWS Container Day

Thank you

top related