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 사용하기
– 대규모 확장성, 클러스터, 스케줄링, 서비스 구동 등
14. AWS Container Day
도커 주요 구성 요소
• 도커 엔진 (또는 도커) – 컨테이너를 생성 또는 실행
• 도커 컨테이너 – 도커 인스턴스
• 도커 이미지 – 컨테이너 실행, 배포를 위한 스냅샷
• 도커 파일 – 이미지 생성 시 포함할 파일, 할당할 포트, 실행할 명령
어 등을 지정
• 도커 레지스트리 – 도커 이미지의 저장소 및 배포 시스템
• 도커 허브 – 레지스트리 서비스, 도커 데몬의 기본 저장소
16. 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 ]
17. 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
…
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
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/
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
사용
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 파티 통합
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
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 서비스와 연동
확장 가능
규모에 따른 성능
보안
57. AWS Container Day
컨테이너 사용 사례
• 손쉬운 애플리케이션 배포
• 애플리케이션 라이프 사이클
• 지속적 통합 (Continuous Integration)
• 지속적 배포 (Continuous Delivery)
• 플랫폼 서비스 (PaaS)
• 분산 애플리케이션 구성
• 분산 애플리케이션 확장