1 Docker Container Docker Image Image Container VM

  • Slides: 47
Download presentation

1. Docker Container 개요 • Docker Image 란? • Image & Container • VM

1. Docker Container 개요 • Docker Image 란? • Image & Container • VM & Container • Image 생성 및 활용 • Docker & Kubernetes of Openshift

Docker Image 실행에 필요한 모든 것을 포함하여 Docker Format의 파일로 생성 App code, runtime,

Docker Image 실행에 필요한 모든 것을 포함하여 Docker Format의 파일로 생성 App code, runtime, system tools, system libraries Image Container

Docker Image vs Container Image An instance of an image is called container Container

Docker Image vs Container Image An instance of an image is called container Container

VM vs Docker Container Guest OS 에서 사용되는 리소스 불필요 Hypervisor로 인한 오버헤드 감소

VM vs Docker Container Guest OS 에서 사용되는 리소스 불필요 Hypervisor로 인한 오버헤드 감소

Docker Hub https: //hub. docker. com/explore/

Docker Hub https: //hub. docker. com/explore/

Docker Hub https: //hub. docker. com/explore/

Docker Hub https: //hub. docker. com/explore/

HTTPD 이미지 실행방법 [root@ip-10 -10 -99 -31 ~]# docker run -d httpd nable to

HTTPD 이미지 실행방법 [root@ip-10 -10 -99 -31 ~]# docker run -d httpd nable to find image 'httpd: latest' locally. . . latest: Pulling from docker. io/library/httpd. . . Command line: 'httpd -D FOREGROUND' [root@ip-10 -10 -99 -31 ~]# docker ps 이미지 다운로드 및 컨테이너 실행 실행중인 컨테이너 조회 CONTAINER ID IMAGE COMMAND CREATED 189 c 74 f 48 d 77 httpd "httpd-foreground" 12 seconds ago [root@ip-10 -10 -99 -31 ~]# docker inspect 189 c 74 f 48 d 77 | grep IPAddress 컨테이너 IP 조회 "Secondary. IPAddresses": null, "IPAddress": "172. 17. 0. 3", [root@ip-10 -10 -99 -31 ~]# curl 172. 17. 0. 3 <html><body><h 1>It works!</h 1></body></html> 컨테이너에서 실행중인 HTTPD 호출

Dockerfile을 이용하여 HTTPD 이미지 생성 [root@master ~]# cat Dockerfile Apache Image 생성 Apache Container

Dockerfile을 이용하여 HTTPD 이미지 생성 [root@master ~]# cat Dockerfile Apache Image 생성 Apache Container 실 행 Port Forwarding FROM docker. io/centos USER root 베이스 이미지 RUN yum clean all && yum repolist && yum -y install httpd && yum clean all RPM 을 이용하여 HTTPD설치 EXPOSE 80 사용할 포트 실행할 파일 CMD ["/usr/sbin/apachectl", "-k", "start", "-D", "FOREGROUND"]

Docker Build [root@master ~]# docker build -t myhttpd. … [root@master ~]# docker images REPOSITORY

Docker Build [root@master ~]# docker build -t myhttpd. … [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE myhttpd latest 07 afc 88 a 9 eb 7 7 seconds ago 250. 1 MB docker. io/centos latest d 123 f 4 e 55 e 12 9 days ago 196. 6 MB # Container 실행 및 Port Forwarding [root@master ~]# docker run -d -p 80: 80 –h myhttpd 3 a 655225 e 667 c 549 c 27572195 cd 0 b 9696 c 85 e 60 bc 30 fa 517 f 53 bf 1225 f 55054 d

Apache Webserver 컨테이너 접속 # 실행중인 컨테이너 조회 [root@master ~]# docker ps CONTAINER ID

Apache Webserver 컨테이너 접속 # 실행중인 컨테이너 조회 [root@master ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 a 655225 e 667 myhttpd "/usr/sbin/apachectl " 53 seconds ago Up 52 seconds 0. 0: 80 ->80/tcp serene_shirley # 컨테이너 내부로 접속 [root@master ~]# docker exec -ti 3 a 655225 e 667 /bin/bash [root@myhttpd /]# hostname myhttpd

Docker Working flow web. rockplace. co. kr Host 52. 78. 245. 72: 80 Port

Docker Working flow web. rockplace. co. kr Host 52. 78. 245. 72: 80 Port Forwarding web. rockplace. co. kr Apache Container: 172. 30. 35. 131: 80

Docker and Kubernetes of Openshift web. rockplace. co. kr 내부DNS HAProxy 52. 78. 245.

Docker and Kubernetes of Openshift web. rockplace. co. kr 내부DNS HAProxy 52. 78. 245. 72: 80 172. 30. 35. 131: 80 Route (내부 Service 위 치 확인) Openshift Node web. rockplace. co. kr Load Balancer: 172. 30. 35. 131: 80 Apache Container/Pod: 10. 0. 10. 11: 80 Service (Load Balancing) Pod (Container)

Docker and Kubernetes of Openshift Docker 만 사용하여 컨테이너 서비스 Port Forwarding Kubernetes 를

Docker and Kubernetes of Openshift Docker 만 사용하여 컨테이너 서비스 Port Forwarding Kubernetes 를 사용하여 컨테이너 서비스 Route Service (LB) Container / Pod web. rockplace. co. kr 172. 30. 35. 131 10. 1. 2. 10: 80, 10. 1. 3. 13: 80

Container Management by Openshift Docker Image Route: web. rockplace. co. kr 외부로부터의 진입점 service:

Container Management by Openshift Docker Image Route: web. rockplace. co. kr 외부로부터의 진입점 service: web 172. 30. 176. 102 Cluster IP (VIP)를 통한 Loadbalancing Pod Kubernetes는 Container를 Pod에 담아서 관리 Replication. Controller 지정된 개수의 Pod가 잘 돌고 있는지… Deployment. Config 몇 개의 Pod를 만들지… 어떻게 Pod를 배포 할지…

2. 이미지 다운로드 및 관리 • Image Registry • Image Download & Push •

2. 이미지 다운로드 및 관리 • Image Registry • Image Download & Push • Openshift Image Stream

Image Registry • Docker Image는 Image Registry에 저장된다. • Docker 명령을 이용하여 Image Registry

Image Registry • Docker Image는 Image Registry에 저장된다. • Docker 명령을 이용하여 Image Registry 로부터 이미지를 받을 수 있다. • 폐쇄망에서는 내부에 Private Image Registry를 구성할 수 있다. Pull Image Redhat Image Registry Openshift Redhat new-app Images Dockerhub Image Registry Private Image Registry ( 폐쇄망 환경)

Image Push & Download • Admin이 외부 Registry 로부터 받거나 자체 제작한 이미지를 Image

Image Push & Download • Admin이 외부 Registry 로부터 받거나 자체 제작한 이미지를 Image Registry 에 올린다. • 내부의 Openshift에서 Image Registry로부터 이미지를 받아갈 수 있다. Docker Image Registry User Docker Image Push Jboss-eap 7 -openshift: 1. 4 Image Download Openshift Jboss-eap 7 -openshift: 1. 4 Image. Stream Jboss-eap 7 -openshift: 1. 5

Openshift Image Stream • Openshift에서는 Image. Stream 형태로 이미지를 관리한다. • 하나의 Image. Stream

Openshift Image Stream • Openshift에서는 Image. Stream 형태로 이미지를 관리한다. • 하나의 Image. Stream 에는 Tag가 다른 여러 개의 이미지가 있고 각각 Image. Stream. Tag와 Image Metadata로 구별될다. Image. Stream Jboss-eap 7 -openshift Image. Stream. Tag 1. 4 jboss-eap@sha 256: 474. . Image Metadata. . 1. 5 jboss-eap@sha 256: 312. . Image Metadata. . . 이미지 Tag (버전정보) Image. Stream. Image 이미지 ID Image. Stream. Mapping 이미지 다운로드 위치 및 상 세정보

S 2 I Builder 이미지란? • • 일반적으로 Java WAS 이미지는 OS Libs, JDK,

S 2 I Builder 이미지란? • • 일반적으로 Java WAS 이미지는 OS Libs, JDK, WAS Engine, Application 으로 이루어진다. 이미지에서 변경이 지속적으로 일어나는 부분은 Application 이다. Builder Image에는 Application을 다운받아 Build 할 수 있는 Builder가 들어있다. (S 2 I: Source To Image) Builder Image는 Application이 포함된 새로운 이미지를 만드는 역할을 한다. 일반 Image S 2 I Builder Application WAS Engine JDK OS Libs Source Download & Build

S 2 I Builder 이미지 작동방식 • 이미지를 컨테이너로 실행하면 Builder 가 작동하여 Application을

S 2 I Builder 이미지 작동방식 • 이미지를 컨테이너로 실행하면 Builder 가 작동하여 Application을 다운로드 받아 새로운 이미지 를 만든다. S 2 I Builder Image Builder Application Image 새로운 이미지 생 성 Builder Application WAS Engine JDK OS Libs Git

S 2 I Builder 이미지 작동방식 • Builder Image는 Git 서버로 부터 Application을 받아

S 2 I Builder 이미지 작동방식 • Builder Image는 Git 서버로 부터 Application을 받아 새로운 Application Image를 생성한다. • 새로운 Application Image는 Openshift 내부에 Openshift Container Registry에 저장된다. • 각 Node로 Application Image를 배포한다. Openshift Infra Node 1 Builder Image Application Image Build Node 2 Openshift Container Registry Application Image 배포 Application Image

기존 이미지를 변경하여 Customizing • 기존 이미지를 변경하여 새로운 이미지를 만들 수 있다 Dockerfile

기존 이미지를 변경하여 Customizing • 기존 이미지를 변경하여 새로운 이미지를 만들 수 있다 Dockerfile FROM jboss-eap-7/eap 70 -openshift # Scripts for troubleshooting COPY files/bin/launch/add_java_opts_append. sh /opt/eap/bin/launch/. . . # Install packages and change gclog name USER 0 RUN sed -i "s/en_US/all/" /etc/yum. conf && yum –y reinstall glibc-common && yum clean all # Maven Repo. Direcotry Permission RUN rm -f /opteap/standalone/deployments/activemq-rar. rar . . . && chmod -R 775 /home/jboss/scripts # Allow arbitrary USER 185 ENV LANG=ko_KR. utf 8 TZ=Asia/Seoul Base Image File 복사 root 유저로 변경 다국어 패키지 설치 불필요 파일 삭제 jboss 유저로 변경하여 실행 OS 문자셋 및 타임존설정

기존 이미지 변경 • Dockerfile을 이용하여 새로운 이미지를 생성한다. # docker build -t my-eap

기존 이미지 변경 • Dockerfile을 이용하여 새로운 이미지를 생성한다. # docker build -t my-eap 70 -openshift: 1. 0. Private Image Registry my-eap 70 -openshift: 1. 0 Push

Guideline for Building Image https: //docs. openshift. com/container-platform/3. 3/creating_images/guidelines. html#openshiftcontainer-platform-specific-guidelines • Image 재사용 •

Guideline for Building Image https: //docs. openshift. com/container-platform/3. 3/creating_images/guidelines. html#openshiftcontainer-platform-specific-guidelines • Image 재사용 • Image에 Tag를 사용하여 유지관리 • Multiple Processes 회피 • Image Build 후 임시파일 제거 • Layer 최소화 • Support Arbitrary User IDs

4. JBoss EAP 이미지 • Openshift용 JBoss EAP 이미지의 특징 • JBoss EAP 이미지

4. JBoss EAP 이미지 • Openshift용 JBoss EAP 이미지의 특징 • JBoss EAP 이미지 작동방식

EAP 7 for Openshift 이미지 특징 구분 내용 운영모드 Standalone Admin Console 없음 JBOSS_HOME

EAP 7 for Openshift 이미지 특징 구분 내용 운영모드 Standalone Admin Console 없음 JBOSS_HOME /opt/eap 실행 스크립트 /opt/eap/bin/openshift-launch. sh OS Version Red Hat Enterprise Linux Server release 7. 3 (Maipo) Session Clustering Kube-Ping 모듈을 통해 클러스터링 가능

JBoss EAP 7 이미지 작동방식 2. /tmp/src의 파일을 /$HOME/source 로 복사 1. git 서버로

JBoss EAP 7 이미지 작동방식 2. /tmp/src의 파일을 /$HOME/source 로 복사 1. git 서버로 부터 받은 파일을 이미지의 /tmp/src 로 복사 3. /$HOME/source 아래의 디렉토리별로 JBoss 관련 위치로 복사 /$HOME/source 하위 디렉토리 configuration deployments modules Openshift Infra jboss-eap 7 -openshift (APP 미포함) APP Build jboss-eap 7 -openshift (APP 포함) Node jboss-eap 7 -openshift (APP 포함)

S 2 I 이미지 내부 스크립트 실행순서 순번 용도 스크립트파일 1 /usr/local/s 2 i/assemble

S 2 I 이미지 내부 스크립트 실행순서 순번 용도 스크립트파일 1 /usr/local/s 2 i/assemble 소스 및 설정파일을 JBoss 내부로 복사 2 /usr/local/s 2 i/run openshift-launch. sh 실행 3 /opt/eap/bin/openshift-launch. sh EAP 기동

Git vs Container 파일위치 • Git 서버의 각 디렉토리 파일들은 아래와 같이 컨테이너 디렉토리로

Git vs Container 파일위치 • Git 서버의 각 디렉토리 파일들은 아래와 같이 컨테이너 디렉토리로 복사된다. Git Directory 구분 APP(소스) 파일 Container Directory / war ear rar jar $JBOSS_HOME/deployments/ 설정파일 /configuration/ 모든파일 (standalone-openshift. xml) $JBOSS_HOME/configuration/ Module /modules/ 모든파일 $JBOSS_HOME/modules/

Openshift Resources 구조 Route 접속 주체 별로 User생성 Application 그룹 또는 Resource 제한단위 User

Openshift Resources 구조 Route 접속 주체 별로 User생성 Application 그룹 또는 Resource 제한단위 User Project User 단위로 접속 User별 권한부여 Project 별 Resource 제한 가능 (CPU, Memory 포함) 개별 Application Service Application Pod Deployment Config Build. Config

Build, Deployment, Pod 현재 실행중인 Pod 14번째 배포 이미지 사용 중 Route Node로 배포된

Build, Deployment, Pod 현재 실행중인 Pod 14번째 배포 이미지 사용 중 Route Node로 배포된 내역 Service Application Pod Deployment Config Build. Config 소스 빌드 내역(Master)

Build. Config • Build. Config는 설정된 내용을 기반으로 Build를 실행하는 역할을 한다. 가져올 Application

Build. Config • Build. Config는 설정된 내용을 기반으로 Build를 실행하는 역할을 한다. 가져올 Application 정보 사용할 Image / 결과 Image Git Repository URL: Build From : http: //gitlab. test. rp. co. kr/root/ncis-eap 70. git openshift/ncis-eap 70 -openshift: 1. 4 Git Reference: master Context Dir: simple-app Push To: myproject/ncis-eap 70 -openshift: latest

6. 배포 및 롤백 • Deployment • Rollback

6. 배포 및 롤백 • Deployment • Rollback

Deployment • Deployment는 Build에 의해 생성된 이미지를 Node로 배포하여 실행시키는 것을 말한다. 배포할 Image

Deployment • Deployment는 Build에 의해 생성된 이미지를 Node로 배포하여 실행시키는 것을 말한다. 배포할 Image 배포 방법 Image Stream Tag: myproject/ncis: latest Strategy Type: Rolling Image가 변경되면 자동으로 배포: yes Max Num Unavailable Pods: 25% ( ¼ 씩 Rolling배포) 설정이 바뀌면 자동으로 배포: yes Replicas: 4 (동시에 유지할 Pod 개수)

7. 서비스 확장 • Manual Scale-Out • Resource Limits • Auto-Scaler

7. 서비스 확장 • Manual Scale-Out • Resource Limits • Auto-Scaler

EAP 7 Application

EAP 7 Application

감사합니다 midware@rockplace. co. kr

감사합니다 midware@rockplace. co. kr