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:877ee473bda901257f1a740e78eb3fa44356ca4ce6913efcd
5361a6c5c103776
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

e011a7a969a914cf2ede7ac6a3ca82ac59306bdd1fabe45df29e6799
9b1b8aa6



[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:6211c350f36a7b7ca615798be39f85a7aa937e108e7ecd49f
71130f9f8f3d806
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 run
Docker 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

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

  • 1.
    AWS Container Day AWSContainer 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
  • 2.
    AWS Container Day 도커의기초 김상필 솔루션즈 아키텍트 아마존웹서비스 2015년 12월 14일
  • 3.
  • 4.
    AWS Container Day 컨테이너란? • 운영체제 가상화 •  프로세스 격리 •  자동화 •  이미지 기반 Server   Guest  OS   Bins/Libs   Bins/Libs   App2  App1  
  • 5.
  • 6.
    AWS Container Day 손쉬운사용, 표준화, 상호운용성을 갖춘 컨테이너 •  컨테이너는 이전부터 존재 (예 : LXC, Solaris Zones, BSD Jails) •  도커 컨테이너의 장점 : -­‐  손쉬운 사용을 위한 툴 -­‐  재사용 가능 컴포넌트 -­‐  현존하는 대부분 Linux 서버에서 구동 : 물리, 가 상, 클라우드, …
  • 7.
    AWS Container Day 컨테이너기술의 장점 Portable •  이식성 장점 •  이미지 기반 배포, 버전 관리 •  어느 곳이나 동일한 운영 환경 •  개발/테스트/운영 환경 동일 Server   Guest  OS   Bins/Libs   Bins/Libs   App2  App1  
  • 8.
    AWS Container Day 컨테이너기술의 장점 Flexible •  유연성 •  이미지 기반으로 배포되는 컨테 이너는 클린하고, 재사용 가능한 모듈화 환경 •  마이크로서비스를 통해 어플리 케이션을 작은 단위로 분할하고, 복잡성 줄이고, 신속하게 개발하 는 것을 가능하게 함 Server   Guest  OS   Bins/Libs   Bins/Libs   App2  App1  
  • 9.
    AWS Container Day 컨테이너기술의 장점 Fast •  가벼운 도커 이미지 •  신속한 개발, 빌드, 배포 과정 Server   Guest  OS   Bins/Libs   Bins/Libs   App2  App1  
  • 10.
    AWS Container Day 컨테이너기술의 장점 Efficient •  필요한 리소스만을 배포 •  OS kernel & libs 를 공유하여 사 용하기 때문에 어플리케이션이 배포하는 것만을 배포 Server   Guest  OS   Bins/Libs   Bins/Libs   App2  App1  
  • 11.
    AWS Container Day +   많은 고객이 Docker를 AWS에서 구동하는 이유 •  손쉬운 배포 •  환경의 신뢰성 •  대규모 환경 관리의 용이성 •  자동화 •  분산 애플리케이션
  • 12.
    AWS Container Day AWS환경에서 Docker 컨테이너 사용하기 •  Docker on EC2 –  Do it yourself –  다양한 도커 관련 오픈소스 및 3rd party 어플리케이션 활용 •  AWS Elastic Beanstalk 사용하기 –  가장 쉽게 도커 구동하기 •  Amazon EC2 Container Service 사용하기 –  대규모 확장성, 클러스터, 스케줄링, 서비스 구동 등
  • 13.
    AWS Container Day DOCKERON EC2 기초 AWS 환경에서 Docker 컨테이너 사용하기
  • 14.
    AWS Container Day 도커주요 구성 요소 •  도커 엔진 (또는 도커) – 컨테이너를 생성 또는 실행 •  도커 컨테이너 – 도커 인스턴스 •  도커 이미지 – 컨테이너 실행, 배포를 위한 스냅샷 •  도커 파일 – 이미지 생성 시 포함할 파일, 할당할 포트, 실행할 명령 어 등을 지정 •  도커 레지스트리 – 도커 이미지의 저장소 및 배포 시스템 •  도커 허브 – 레지스트리 서비스, 도커 데몬의 기본 저장소
  • 15.
    AWS Container Day AmazonLinux 인스턴스에서 도커 실행하기 1.  Amazon Linux 설치
  • 16.
    AWS Container Day AmazonLinux 인스턴스에서 도커 실행하기 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 ]
  • 17.
    AWS Container Day AmazonLinux 인스턴스에서 도커 실행하기 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
 …
  • 18.
    AWS Container Day AWS에서CoreOS 와 도커 실행하기 1.  CoreOS AMI 사용
  • 19.
    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
  • 20.
    AWS Container Day 도커허브 계정 생성 (Optional)
  • 21.
    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
  • 22.
    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

  • 23.
    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/  
  • 24.
    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
  • 25.
    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/  
  • 26.
    AWS Container Day 도커이미지 생성 7.  도커 내 웹서비스 동작 확인
  • 27.
    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/
  • 28.
    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:877ee473bda901257f1a740e78eb3fa44356ca4ce6913efcd 5361a6c5c103776
  • 29.
    AWS Container Day 도커이미지 생성 8.  도커 이미지를 도커 허브에 푸시 (Optional) (계속)
  • 30.
    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>
 …
  • 31.
    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
 e011a7a969a914cf2ede7ac6a3ca82ac59306bdd1fabe45df29e6799 9b1b8aa6
 
 [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
  • 32.
    AWS Container Day 도커이미지 수정 4.  도커 이미지를 도커 허브에 푸시 (Optional) [ec2-user ecs-demo-php-simple-app]$ docker push sangpill/amazon-ecs-sample:v2
 …
 Digest: sha256:6211c350f36a7b7ca615798be39f85a7aa937e108e7ecd49f 71130f9f8f3d806 docker  commit은 간편하지만, 번거롭고 협업 시 배포 프로세스와 통합이 쉽지 않으므로 docker  build   사용  
  • 33.
    AWS Container Day 도커이미지 수정 4.  도커 이미지를 도커 허브에 푸시 (Optional)
  • 34.
    AWS Container Day 도커레지스트리 구성 옵션 •  Docker Hub – SaaS로 제공 •  Docker Registry – 오픈소스 프로젝트를 직접 구축 •  Docker Trusted Registry – 엔터프라이즈 버전 구성 •  Amazon EC2 Container Registry(ECR) – 완전 관리형 서비스
  • 35.
    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
  • 36.
    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:

  • 37.
    AWS Container Day 도커레지스트리 구성 옵션 •  Docker Hub •  Docker Registry •  Docker Trusted Registry •  Amazon EC2 Container Registry(ECR) Docker Trusted Registry for AWS
  • 38.
    AWS Container Day 도커레지스트리 구성 옵션 •  Docker Hub •  Docker Registry •  Docker Trusted Registry •  Amazon EC2 Container Registry(ECR) •  완전 관리형 서비스 •  Amazon ECS 통합 •  Docker 호환 •  고가용성 및 내구성 •  팀 협업 •  간단한 워크플로우 •  접근 제어 •  암호화 •  모니터링 •  3rd 파티 통합
  • 39.
    AWS Container Day 컨테이너배포 AWS 환경에서 Docker 컨테이너 사용하기
  • 40.
    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
  • 41.
    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
  • 42.
    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
  • 43.
    AWS Container Day 도커이미지 배포
  • 44.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 – 커맨드 및 스크립트 직접 수행 •  지속적 배포(CD) 툴 – 스크립트를 기존 CD 툴과 통합하여 사용 •  AWS Elastic BeansTalk – AWS에 Docker를 가장 쉽게 배포 •  오케스트레이션 툴 – 클러스터 및 스케줄링 •  Amazon EC2 Container Service(ECS) – 완전 관리형 서비스
  • 45.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 •  지속적 배포(CD) 툴 •  AWS Elastic BeansTalk •  오케스트레이션 툴 •  Amazon ECS 수행 명령어 •  # docker pull •  # docker run Docker run 레퍼런스 •  Container identification •  IPC settings •  Network settings •  Restart policies •  Clean up •  Runtime resource constraints •  Runtime privilege
  • 46.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 •  지속적 배포(CD) 툴 •  AWS Elastic BeansTalk •  오케스트레이션 툴 •  Amazon ECS 배포의 유연성 반복 수행 가시성 배포 환경의 일관성
  • 47.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 •  지속적 배포(CD) 툴 •  AWS Elastic BeansTalk •  오케스트레이션 툴 •  Amazon ECS 도커를 실행하는 손쉬운 방법 Docker (Single) Multi-container Docker •  멀티 프로세스 어플리케이션 •  ECS를 래핑 •  관리를 단순화함
  • 48.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 •  지속적 배포(CD) 툴 •  AWS Elastic BeansTalk •  오케스트레이션 툴 •  Amazon ECS 클러스터 및 스케줄러 직접 구성 관리 3rd party 툴 •  Kubernetes •  Mesos, Marathon, Chronos (https://github.com/awslabs/ ecs-mesos-scheduler-driver) •  Swarm
  • 49.
    AWS Container Day 도커실행 옵션 •  수동 / 스크립트 •  지속적 배포(CD) 툴 •  AWS Elastic BeansTalk •  오케스트레이션 툴 •  Amazon ECS Docker 호환성 모든 규모의 클러스터 쉽게 관리 유연한 컨테이너 배치 다른 AWS 서비스와 연동 확장 가능 규모에 따른 성능 보안
  • 50.
    AWS Container Day 컨테이너파이프라인 AWS 환경에서 Docker 컨테이너 사용하기
  • 51.
    AWS Container Day 컨테이너배포 형태 기본 이미지   패치   IT  운영   유틸리티  
  • 52.
    AWS Container Day 컨테이너배포 형태 기본 이미지   Ruby   Redis   Logger   IT  운영   유틸리티   패치  
  • 53.
    AWS Container Day 컨테이너배포 형태 기본 이미지   개발자   Ruby   Redis   Logger   App   IT  운영   유틸리티   패치  
  • 54.
    AWS Container Day 컨테이너배포 형태 기본 이미지   Ruby   Redis   Logger   App   개발자  IT  운영   유틸리티   패치  
  • 55.
    AWS Container Day 연속배포 (Continuous Deployment) Bucket Amazon ECS AWS CloudFormation ECS Cluster
  • 56.
    AWS Container Day 컨테이너사용사례 AWS 환경에서 Docker 컨테이너 사용하기
  • 57.
    AWS Container Day 컨테이너사용 사례 •  손쉬운 애플리케이션 배포 •  애플리케이션 라이프 사이클 •  지속적 통합 (Continuous Integration) •  지속적 배포 (Continuous Delivery) •  플랫폼 서비스 (PaaS) •  분산 애플리케이션 구성 •  분산 애플리케이션 확장
  • 58.
  • 59.